Twilioを利用し、コンタクトセンター(現在は音声のみ)の開発を行っております。
通話機能を実装しているのですが、時々なのですが、意図しない切断や、TaskRouterの切断が発生し、
原因について調査を行っております。
・TaskRouterの切断について
no valid credentials availableのエラーが起因しているようなのですが、
トークン更新処理はドキュメントの通りに処理を行っているつもりです。
・通話中の切断について
エラーメッセージですが、31204(無効なJWTトークン)に起因しているようなのですが、
Twilio Clientで31205(トークン期限切れ)を検知した際は、トークンの更新処理も行っており、
なぜ31204エラーが発生するのか、頭を悩ませております。
トークンの取得、更新処理は以下のようになっております。
1)ログイン時(画面表示時)にTwilio Sync、Twilio TaskRouter、Twilio Clientのトークンをそれぞれ取得します。
2)Twilio Syncのトークン期限切れ3分まえに(1)のトークンをそれぞれ更新します。
3)その他、Twilio TaskRouterでエラー、もしくはトークン切れを検知すると自身のトークンを更新します。
4)その他、Twilio Clientでオフラインを検知すると自身のトークンを更新します。
それぞれのトークン関連部分のみですが、ソースコードを抜粋いたしましたので以下に記載いたします。
=============
JavaScript
1var VmInstance; 2export default { 3 data () { 4 return { 5 worker: null, 6 syncClient: null, 7 } 8 }, 9 mounted() { 10 this.VmInstance = this; 11 this.TwilioSync(); 12 this.TaskRouter(); 13 this.TwilioClient(); 14 }, 15 methods: { 16 TwilioSync: function() { axios.get("/api/token/generate/twiliosync/"+this.sid).then((res) => { this.EventTwilioSync(res.data); }); }, 17 TaskRouter: function() { axios.get("/api/token/generate/taskrouter/"+this.sid).then((res) => { this.EventTaskRouter(res.data); }); }, 18 TwilioClient: function() { axios.get("/api/token/generate/voip/"+this.sid).then((res) => { this.EventTwilioDevice(res.data); }); }, 19 EventTwilioSync: function(data) 20 { 21 var token = data.token; 22 console.log('Init token for Twilio Sync', token); 23 this.syncClient = new Twilio.Sync.Client(token); 24 this.syncClient.on('tokenAboutToExpire', function () { 25 console.log('Twilio Sync will be expired in three minutes'); 26 VmInstance.UpdateTwilioSyncToken(); 27 VmInstance.UpdateTaskRouterToken(); 28 VmInstance.UpdateTwilioClient(); 29 }); 30 }, 31 EventTaskRouter: function(token) 32 { 33 console.log('Init token for Twilio TaskRouter', token); 34 this.worker = new Twilio.TaskRouter.Worker(token); 35 this.worker.on("error", function(error) { 36 console.log('There is an error on TaskRouter', error); 37 VmInstance.UpdateTaskRouterToken(); 38 }); 39 this.worker.on("token.expired", function() { 40 console.log("worker token was expired."); 41 VmInstance.UpdateTaskRouterToken(); 42 }); 43 this.worker.on("connected", function() { 44 console.log("Websocket has connected"); 45 }); 46 this.worker.on("disconnected", function() { 47 console.log("Websocket has disconnected"); 48 }); 49 }, 50 EventTwilioDevice: function(token) 51 { 52 console.log('Init token for Twilio Client', token); 53 Twilio.Device.setup(token, { debug: true }); 54 Twilio.Device.offline(function (device) { 55 console.log('There is offline', device); 56 VmInstance.UpdateTwilioClient(); 57 }); 58 }, 59 UpdateTaskRouterToken: function() 60 { 61 axios.get("/api/token/generate/taskrouter/"+this.sid).then((res) => { 62 console.log('Update token for Twilio TaskRouter', res.data); 63 VmInstance.worker.updateToken(res.data); 64 }); 65 }, 66 UpdateTwilioSyncToken: function() 67 { 68 axios.get("/api/token/generate/twiliosync/"+this.sid).then((res) => { 69 console.log('Update token for Twilio Sync', res.data.token); 70 VmInstance.syncClient.updateToken(res.data.token); 71 }); 72 }, 73 UpdateTwilioClient: function() 74 { 75 axios.get("/api/token/generate/voip/"+this.sid).then((res) => { 76 console.log('Update token for Twilio Client', res.data); 77 Twilio.Device.setup(res.data); 78 }); 79 }, 80 } 81}
=============
例外処理など、ほかに考慮すべき点などございましたら、アドバイスなど頂戴できればと思います。
また、通話中の意図しない切断についてなのですが、
Twilioを利用した場合、クライアントPC側で発生する主な切断原因には、
どのようなものがありますでしょうか?
宜しくお願いいたします。
あなたの回答
tips
プレビュー