|
1 | 1 | 'use strict'; |
2 | 2 |
|
3 | | -import { NativeModules, NativeAppEventEmitter } from 'react-native'; |
4 | | -import requestEvent from './js/ResetContextsRequest'; |
5 | | -import ResetContextsRequest from './js/ResetContextsRequest'; |
| 3 | +import { NativeAppEventEmitter } from 'react-native'; |
6 | 4 | import Voice from './js/RCTVoice'; |
7 | | -export const DEFAULT_BASE_URL = "https://api.api.ai/v1/"; |
8 | | -export const DEFAULT_API_VERSION = "20150910"; |
| 5 | +import { Dialogflow } from './js/Dialogflow'; |
9 | 6 |
|
10 | | -class Dialogflow { |
11 | 7 |
|
12 | | - setConfiguration(accessToken, languageTag) { |
13 | | - this.accessToken = accessToken; |
14 | | - this.languageTag = languageTag; |
15 | | - this.sessionId = this.sessionId ? this.sessionId : guid(); |
| 8 | +var dialogflow = new Dialogflow(); |
16 | 9 |
|
| 10 | +dialogflow.setConfiguration = function (accessToken, languageTag) { |
| 11 | + dialogflow.accessToken = accessToken; |
| 12 | + dialogflow.languageTag = languageTag; |
| 13 | + dialogflow.sessionId = dialogflow.sessionId ? dialogflow.sessionId : dialogflow.guid(); |
17 | 14 |
|
| 15 | + Voice.onSpeechStart = () => (c) => dialogflow.onListeningStarted(c); |
| 16 | + Voice.onSpeechEnd = () => (c) => dialogflow.onListeningFinished(c); |
| 17 | +} |
18 | 18 |
|
19 | | - Voice.onSpeechStart = () => (c) => this.onListeningStarted(c); |
20 | | - Voice.onSpeechEnd = () => (c) => this.onListeningFinished(c); |
21 | | - } |
22 | | - |
23 | | - |
24 | | - startListening(onResult, onError) { |
25 | | - |
26 | | - this.subscription = NativeAppEventEmitter.addListener( |
27 | | - 'onSpeechResults', |
28 | | - (result) => { |
29 | | - if (result.value) { |
30 | | - console.log(result.value); |
31 | | - this.requestQuery(result.value[0], onResult, onError); |
32 | | - } |
33 | | - |
34 | | - } |
35 | | - ); |
36 | | - |
37 | | - Voice.start(this.languageTag); |
38 | | - } |
39 | | - |
40 | | - finishListening() { |
41 | | - Voice.stopSpeech(); |
42 | | - } |
43 | | - |
44 | | - onListeningStarted(callback) { |
45 | | - callback(); |
46 | | - } |
47 | | - |
48 | | - onListeningCanceled(callback) { |
49 | | - callback(); |
50 | | - } |
51 | | - |
52 | | - onListeningFinished(callback) { |
53 | | - callback(); |
54 | | - } |
55 | | - |
56 | | - setContexts(contexts) { |
57 | | - this.contexts = contexts; |
58 | | - } |
| 19 | +dialogflow.startListening = function (onResult, onError) { |
59 | 20 |
|
60 | | - setPermanentContexts(contexts) { |
61 | | - // set lifespan to 1 if it's not set |
62 | | - contexts.forEach((c, i, a) => { |
63 | | - if (!c.lifespan) { |
64 | | - a[i] = { ...c, lifespan: 1 }; |
| 21 | + dialogflow.subscription = NativeAppEventEmitter.addListener( |
| 22 | + 'onSpeechResults', |
| 23 | + (result) => { |
| 24 | + if (result.value) { |
| 25 | + dialogflow.requestQuery(result.value[0], onResult, onError); |
65 | 26 | } |
66 | | - }); |
67 | | - |
68 | | - this.permanentContexts = contexts; |
69 | | - } |
70 | 27 |
|
71 | | - setEntities(entities) { |
72 | | - this.entities = entities; |
73 | | - } |
74 | | - |
75 | | - onAudioLevel(callback) { |
76 | | - |
77 | | - } |
78 | | - |
79 | | - requestEvent = async (eventName, eventData, onResult, onError) => { |
80 | | - |
81 | | - const data = { |
82 | | - "event": { |
83 | | - "name": eventName, |
84 | | - "data": { |
85 | | - ...eventData |
86 | | - } |
87 | | - }, |
88 | | - 'lang': this.languageTag, |
89 | | - "sessionId": this.sessionId |
90 | | - }; |
91 | | - |
92 | | - fetch(DEFAULT_BASE_URL + "query?v=" + DEFAULT_API_VERSION, { |
93 | | - method: "POST", |
94 | | - headers: { |
95 | | - 'Content-Type': 'application/json', |
96 | | - 'Authorization': 'Bearer ' + this.accessToken, |
97 | | - 'charset': "utf-8" |
98 | | - }, |
99 | | - body: JSON.stringify(data) |
100 | | - }) |
101 | | - .then(function (response) { |
102 | | - var json = response.json().then(onResult) |
103 | | - }) |
104 | | - .catch(onError); |
105 | | - }; |
106 | | - |
107 | | - requestQuery = async (query, onResult, onError) => { |
108 | | - |
109 | | - const data = { |
110 | | - "contexts": this.mergeContexts(this.contexts, this.permanentContexts), |
111 | | - "query": query, |
112 | | - 'lang': this.languageTag, |
113 | | - "sessionId": this.sessionId.toString() |
114 | | - }; |
115 | | - |
116 | | - fetch(DEFAULT_BASE_URL + "query?v=" + DEFAULT_API_VERSION, { |
117 | | - method: "POST", |
118 | | - headers: { |
119 | | - 'Content-Type': 'application/json', |
120 | | - 'Authorization': 'Bearer ' + this.accessToken, |
121 | | - 'charset': "utf-8" |
122 | | - }, |
123 | | - body: JSON.stringify(data) |
124 | | - }) |
125 | | - .then(function (response) { |
126 | | - var json = response.json().then(onResult) |
127 | | - }) |
128 | | - .catch(onError); |
129 | | - }; |
130 | | - |
131 | | - mergeContexts(context1, context2) { |
132 | | - if (!context1) { |
133 | | - return context2; |
134 | | - } else if (!context2) { |
135 | | - return context1; |
136 | | - } else { |
137 | | - return [...context1, ...context2]; |
138 | 28 | } |
139 | | - } |
| 29 | + ); |
140 | 30 |
|
141 | | - resetContexts(onResult, onError) { |
142 | | - let request = new ResetContextsRequest(this.client.getAccessToken(), this.client.getSessionId(), null); |
143 | | - request.perform().then(res => onResult(res)).catch(err => onError(err)); |
144 | | - }; |
145 | | - |
146 | | - |
147 | | - LANG_CHINESE_CHINA = "zh-CN"; |
148 | | - LANG_CHINESE_HONGKONG = "zh-HK"; |
149 | | - LANG_CHINESE_TAIWAN = "zh-TW"; |
150 | | - LANG_DUTCH = "nl"; |
151 | | - LANG_ENGLISH = "en"; |
152 | | - LANG_ENGLISH_GB = "en-GB"; |
153 | | - LANG_ENGLISH_US = "en-US"; |
154 | | - LANG_FRENCH = "fr"; |
155 | | - LANG_GERMAN = "de"; |
156 | | - LANG_ITALIAN = "it"; |
157 | | - LANG_JAPANESE = "ja"; |
158 | | - LANG_KOREAN = "ko"; |
159 | | - LANG_PORTUGUESE = "pt"; |
160 | | - LANG_PORTUGUESE_BRAZIL = "pt-BR"; |
161 | | - LANG_RUSSIAN = "ru"; |
162 | | - LANG_SPANISH = "es"; |
163 | | - LANG_UKRAINIAN = "uk"; |
| 31 | + Voice.start(dialogflow.languageTag); |
164 | 32 | } |
165 | 33 |
|
166 | | - |
167 | | -/** |
168 | | - * generates new random UUID |
169 | | - * @returns {string} |
170 | | - */ |
171 | | -function guid() { |
172 | | - const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); |
173 | | - return s4() + s4() + "-" + s4() + "-" + s4() + "-" + |
174 | | - s4() + "-" + s4() + s4() + s4(); |
| 34 | +dialogflow.finishListening = function () { |
| 35 | + Voice.stop(); |
175 | 36 | } |
176 | 37 |
|
177 | | -export default new Dialogflow(); |
| 38 | +export default dialogflow; |
0 commit comments