WebGL과 채팅봇의 조합 React/Firebase편
17683 단어 FirebaseBotFrameworkReactredux
이번이 처음으로 세상에 응용 프로그램을 내 보겠습니다,,
우선은 릴리스하면 지금까지를 목표로 노력합니다.
React/Firebase편입니다.
React 프로젝트에서 봇을 이동한 후 Firebase에 배포할 때까지 진행합니다.
그 외의 기사는 이쪽으로부터
・봇편
만드는 것
캐릭터와 대화하고 있는 바람의 챗봇을 만들어 봅니다.
자꾸 등장 인물
프런트 엔드
・React-redux 이번
· Scss
· Three.js
백엔드
· Firebase 이번
· Azure
· Microsoft BotFramework 이번
깨끗한 아키텍처라든지 전혀 모르기 때문에, 가능한 한 지견이 있는 것을 선택하고 있습니다.
백엔드로 막혀 시간 낭비하지 않도록, 노력하자!
React-Redux
React에서 프런트 엔드를 구현할 때 Bot Framework Web Chat을 사용합니다. 몇 가지 샘플이 준비되어 있으며, 이번에는 샘플 중 11.12.14를 참고하고 있습니다.
· React 프로젝트 만들기
$ 作業ディレクトリ/
$ npx create-react-app webgl_bot
$ npm install botframework-webchat memoize-one
$ npm audit //足りないものとかあるかなー
$ npm install react react-dom //reactないって言われたw
$ git init && git add . //git入れるよ
$ git commit -m "First commit."
$ git remote add origin [email protected]:Yourname/aaaa.git && git push -u origin master
Git의 명령 언제까지나 기억할 수 없어,,,
참고 : htps : // 코 m / 켄타 코다시마 / ms / 16 아 787779
· 초기 디렉토리 구성
구성요소
이번에 사용할 파일을 추가합니다.
$ cd src
$ touch AnimateWebChat.js // 親コンポーネント
$ touch Webchat.js // 子コンポーネント
$ touch animations.js // animation個別の動きを記述する
먼저 App.js
를 다시 씁니다.
App.js+ import AnimateWebChat from './AnimateWebChat'
function App() {
return (
<AnimateWebChat /> // returnの中をコンポーネントを返すように書き換え
);
}
WebChat.js
에 웹 채팅을 렌더링하는 과정을 설명합니다.
WebChat.jsimport { DirectLine } from 'botframework-directlinejs';
import React from 'react';
import ReactWebChat, { createStyleSet } from 'botframework-webchat';
export default class extends React.Component {
constructor(props) {
super(props);
this.directLine = new DirectLine({ token: 'Your Token' });
}
render() {
const {
props: { className, store }, //AnimateWebchat.jsから渡されるprops、のはず
} = this;
return (
<ReactWebChat
className = {`${className || ''}webchat`}
directLine = { this.directLine }
store = { store }
/>
);
}
}
그런 다음 사용자의 응답을 듣고 이벤트를 발화시키는 AnimateWebchat.js
를 작성합니다.
이 클래스에 store를 세워 애플리케이션 전체의 state를 관리합니다.
action
에 사용자가 입력한 문자열이나 액션의 타입이 들어 있습니다.
액션 유형은 기본적으로 제공됩니다.
각 액션의 차이는 아직 미세하게 확인할 수 없기 때문에 추기하고 싶습니다.
여기에서 기본 동작을 확인할 수 있습니다.
htps : // 기주 b. 코 m / 미 c 로소 ft / 보 tF 라메를 rk ぇ b t t / t ree / ms r / pacc s / 이것 / src / a c chion s
AnimateWebchat.jsimport React from 'react'
import { createStore, createStyleSet } from 'botframework-webchat'
import Webchat from './Webchat'
import animations from './animations'
export default class extends React.Component {
constructor(props) {
super(props)
// storeを立ててactionを元にイベント発火、stateの書き換えをする
const store = createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
setTimeout(() => {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'webchat/join',
value: {
language: window.navigator.language
}
}
});
}, 1000);
} else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
//animations呼び出し時にactionを参照するようにする
const DoAnimation = animations.bind(action)
DoAnimation();
}
return next(action);
});
this.state = { store };
}
render() {
const {
state: {
store,
}
} = this;
return (
<Webchat
className="Animate" //WebChatコンポーネントにpropsを渡していく
store={store}
/>
)
}
}
스타일링 조정
스타일을 조정합니다. 기본값은 모두 삭제하고 다시 씁니다.
App.csscode {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
html,
body {
height: 100%;
margin: 0;
position: relative;
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
#root,
#root > * {
height: 100%;
width: 100%;
}
여기 한 번 yarn start
합니다. 봇이 응답하는지 확인합니다.
사용자 액션을 바탕으로 이벤트 점화
사용자의 액션을 바탕으로 애니메이션을 구현합니다.
이번에는 테스트로 사용자가 입력한 문자열을 바탕으로 화면에 경고를 내도록 합니다.
animations.jsexport default function () {
const activity = this.payload.activity //呼び出し元であるactionをthisとする、はず
if (activity.from.role === 'user') {
switch (activity.text) {
case 'hello':
alert('Get Hello saying')
break;
default:
break;
}
}
}
흐리게 보이기 어렵지만 hello를 입력하면 경고가 표시됩니다.
지금까지 한 번 firebase에 배포합니다.
Firebase
Firebase는 처음 만졌습니다.
(Azure의 webapp에서도 좋았지만, 주변에 Firebase + vue로 앱을 만드는 사람이 많기 때문에 곤란했을 때 들릴 것 같습니다.
이번에는 firebase의 Hosting을 이용합니다.
아래를 참고하여 npm만 yarn으로 읽어서 배포했습니다.
· Firebase와 Reactjs - Hosting
배포에 성공했기 때문에 이번에는 여기까지 합니다.
Reference
이 문제에 관하여(WebGL과 채팅봇의 조합 React/Firebase편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chocoshop/items/77d6319bf54d97eda4e1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
프런트 엔드
・React-redux 이번
· Scss
· Three.js
백엔드
· Firebase 이번
· Azure
· Microsoft BotFramework 이번
깨끗한 아키텍처라든지 전혀 모르기 때문에, 가능한 한 지견이 있는 것을 선택하고 있습니다.
백엔드로 막혀 시간 낭비하지 않도록, 노력하자!
React-Redux
React에서 프런트 엔드를 구현할 때 Bot Framework Web Chat을 사용합니다. 몇 가지 샘플이 준비되어 있으며, 이번에는 샘플 중 11.12.14를 참고하고 있습니다.
· React 프로젝트 만들기
$ 作業ディレクトリ/
$ npx create-react-app webgl_bot
$ npm install botframework-webchat memoize-one
$ npm audit //足りないものとかあるかなー
$ npm install react react-dom //reactないって言われたw
$ git init && git add . //git入れるよ
$ git commit -m "First commit."
$ git remote add origin [email protected]:Yourname/aaaa.git && git push -u origin master
Git의 명령 언제까지나 기억할 수 없어,,,
참고 : htps : // 코 m / 켄타 코다시마 / ms / 16 아 787779
· 초기 디렉토리 구성
구성요소
이번에 사용할 파일을 추가합니다.
$ cd src
$ touch AnimateWebChat.js // 親コンポーネント
$ touch Webchat.js // 子コンポーネント
$ touch animations.js // animation個別の動きを記述する
먼저 App.js
를 다시 씁니다.
App.js+ import AnimateWebChat from './AnimateWebChat'
function App() {
return (
<AnimateWebChat /> // returnの中をコンポーネントを返すように書き換え
);
}
WebChat.js
에 웹 채팅을 렌더링하는 과정을 설명합니다.
WebChat.jsimport { DirectLine } from 'botframework-directlinejs';
import React from 'react';
import ReactWebChat, { createStyleSet } from 'botframework-webchat';
export default class extends React.Component {
constructor(props) {
super(props);
this.directLine = new DirectLine({ token: 'Your Token' });
}
render() {
const {
props: { className, store }, //AnimateWebchat.jsから渡されるprops、のはず
} = this;
return (
<ReactWebChat
className = {`${className || ''}webchat`}
directLine = { this.directLine }
store = { store }
/>
);
}
}
그런 다음 사용자의 응답을 듣고 이벤트를 발화시키는 AnimateWebchat.js
를 작성합니다.
이 클래스에 store를 세워 애플리케이션 전체의 state를 관리합니다.
action
에 사용자가 입력한 문자열이나 액션의 타입이 들어 있습니다.
액션 유형은 기본적으로 제공됩니다.
각 액션의 차이는 아직 미세하게 확인할 수 없기 때문에 추기하고 싶습니다.
여기에서 기본 동작을 확인할 수 있습니다.
htps : // 기주 b. 코 m / 미 c 로소 ft / 보 tF 라메를 rk ぇ b t t / t ree / ms r / pacc s / 이것 / src / a c chion s
AnimateWebchat.jsimport React from 'react'
import { createStore, createStyleSet } from 'botframework-webchat'
import Webchat from './Webchat'
import animations from './animations'
export default class extends React.Component {
constructor(props) {
super(props)
// storeを立ててactionを元にイベント発火、stateの書き換えをする
const store = createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
setTimeout(() => {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'webchat/join',
value: {
language: window.navigator.language
}
}
});
}, 1000);
} else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
//animations呼び出し時にactionを参照するようにする
const DoAnimation = animations.bind(action)
DoAnimation();
}
return next(action);
});
this.state = { store };
}
render() {
const {
state: {
store,
}
} = this;
return (
<Webchat
className="Animate" //WebChatコンポーネントにpropsを渡していく
store={store}
/>
)
}
}
스타일링 조정
스타일을 조정합니다. 기본값은 모두 삭제하고 다시 씁니다.
App.csscode {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
html,
body {
height: 100%;
margin: 0;
position: relative;
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
#root,
#root > * {
height: 100%;
width: 100%;
}
여기 한 번 yarn start
합니다. 봇이 응답하는지 확인합니다.
사용자 액션을 바탕으로 이벤트 점화
사용자의 액션을 바탕으로 애니메이션을 구현합니다.
이번에는 테스트로 사용자가 입력한 문자열을 바탕으로 화면에 경고를 내도록 합니다.
animations.jsexport default function () {
const activity = this.payload.activity //呼び出し元であるactionをthisとする、はず
if (activity.from.role === 'user') {
switch (activity.text) {
case 'hello':
alert('Get Hello saying')
break;
default:
break;
}
}
}
흐리게 보이기 어렵지만 hello를 입력하면 경고가 표시됩니다.
지금까지 한 번 firebase에 배포합니다.
Firebase
Firebase는 처음 만졌습니다.
(Azure의 webapp에서도 좋았지만, 주변에 Firebase + vue로 앱을 만드는 사람이 많기 때문에 곤란했을 때 들릴 것 같습니다.
이번에는 firebase의 Hosting을 이용합니다.
아래를 참고하여 npm만 yarn으로 읽어서 배포했습니다.
· Firebase와 Reactjs - Hosting
배포에 성공했기 때문에 이번에는 여기까지 합니다.
Reference
이 문제에 관하여(WebGL과 채팅봇의 조합 React/Firebase편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/chocoshop/items/77d6319bf54d97eda4e1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ 作業ディレクトリ/
$ npx create-react-app webgl_bot
$ npm install botframework-webchat memoize-one
$ npm audit //足りないものとかあるかなー
$ npm install react react-dom //reactないって言われたw
$ git init && git add . //git入れるよ
$ git commit -m "First commit."
$ git remote add origin [email protected]:Yourname/aaaa.git && git push -u origin master
$ cd src
$ touch AnimateWebChat.js // 親コンポーネント
$ touch Webchat.js // 子コンポーネント
$ touch animations.js // animation個別の動きを記述する
+ import AnimateWebChat from './AnimateWebChat'
function App() {
return (
<AnimateWebChat /> // returnの中をコンポーネントを返すように書き換え
);
}
import { DirectLine } from 'botframework-directlinejs';
import React from 'react';
import ReactWebChat, { createStyleSet } from 'botframework-webchat';
export default class extends React.Component {
constructor(props) {
super(props);
this.directLine = new DirectLine({ token: 'Your Token' });
}
render() {
const {
props: { className, store }, //AnimateWebchat.jsから渡されるprops、のはず
} = this;
return (
<ReactWebChat
className = {`${className || ''}webchat`}
directLine = { this.directLine }
store = { store }
/>
);
}
}
import React from 'react'
import { createStore, createStyleSet } from 'botframework-webchat'
import Webchat from './Webchat'
import animations from './animations'
export default class extends React.Component {
constructor(props) {
super(props)
// storeを立ててactionを元にイベント発火、stateの書き換えをする
const store = createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
setTimeout(() => {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'webchat/join',
value: {
language: window.navigator.language
}
}
});
}, 1000);
} else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY') {
//animations呼び出し時にactionを参照するようにする
const DoAnimation = animations.bind(action)
DoAnimation();
}
return next(action);
});
this.state = { store };
}
render() {
const {
state: {
store,
}
} = this;
return (
<Webchat
className="Animate" //WebChatコンポーネントにpropsを渡していく
store={store}
/>
)
}
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
html,
body {
height: 100%;
margin: 0;
position: relative;
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
#root,
#root > * {
height: 100%;
width: 100%;
}
export default function () {
const activity = this.payload.activity //呼び出し元であるactionをthisとする、はず
if (activity.from.role === 'user') {
switch (activity.text) {
case 'hello':
alert('Get Hello saying')
break;
default:
break;
}
}
}
Firebase는 처음 만졌습니다.
(Azure의 webapp에서도 좋았지만, 주변에 Firebase + vue로 앱을 만드는 사람이 많기 때문에 곤란했을 때 들릴 것 같습니다.
이번에는 firebase의 Hosting을 이용합니다.
아래를 참고하여 npm만 yarn으로 읽어서 배포했습니다.
· Firebase와 Reactjs - Hosting
배포에 성공했기 때문에 이번에는 여기까지 합니다.
Reference
이 문제에 관하여(WebGL과 채팅봇의 조합 React/Firebase편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chocoshop/items/77d6319bf54d97eda4e1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)