Skypeボットを使ってSkypeチャットのConversation IDを取得する手順
はじめに
Skype上の全てのチャットには固有のIDが付与されており、これをConversation ID(カンバセーションID、Conversationは「会話」という意味です。)と呼びます。Conversation IDは、Skype上の1対1、グループ含む全てのチャットに付与されます。そしてこのConversation IDを使って、例えばSkypeボットにメッセージを投稿させたり、ユーザからのメッセージを受信したりするチャットを指定することができます。ここではこのConversation IDの取得手順をメモします。
できるようになること
Skype上のチャットのConversation IDを取得できます。1対1チャット、グループチャットどちらでも取得できます。
前提と環境と必要となるもの
以下を前提としています。
- Microsoftアカウントは取得済とする。Microsoft Azureを使用するため。
- Microsoft Azure上で、エコーボットの作成を完了していることを前提とします。エコーボットの作成は、Microsoft Azure上でBasicという名前のボットテンプレートを使うとコードを書くことなく簡単に作成できます。詳しい手順はこちらMicrosoft Bot FrameworkでSkypeのエコーボットを作成する手順にまとめていますのでまだ作成していない場合はご覧ください。
エコーボットの応答内容をConversation IDにする
Microsoft Azure上でエコーボットのコードを1行だけ変更し、ユーザのメッセージ投稿に対してそのチャットのConversation IDを応答してくれるボットに変更します。 なお、今回はわずかな変更となるので、ここではMicrosoft Azure上のオンラインエディタを使ってコードの編集を行います。MIcorosft Azure上で作成したボットのダッシュボードに移動し、その中に「ビルド」をクリックします。すると、以下のように右下に「オンラインコードエディターを開く」とあるので、これをクリックします。
「オンラインコードエディターを開く」をクリックすると、以下のようにコードが表示されます。この中で、以下のように「app.js」をクリックし、開きます。
app.js
の中身は、以下のようなコードになっています。(2018年10月時点)
/*-----------------------------------------------------------------------------
A simple echo bot for the Microsoft Bot Framework.
-----------------------------------------------------------------------------*/
var restify = require('restify');
var builder = require('botbuilder');
var botbuilder_azure = require("botbuilder-azure");
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword,
openIdMetadata: process.env.BotOpenIdMetadata
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
/*----------------------------------------------------------------------------------------
* Bot Storage: This is a great spot to register the private state storage for your bot.
* We provide adapters for Azure Table, CosmosDb, SQL Azure, or you can implement your own!
* For samples and documentation, see: https://github.com/Microsoft/BotBuilder-Azure
* ---------------------------------------------------------------------------------------- */
var tableName = 'botdata';
var azureTableClient = new botbuilder_azure.AzureTableClient(tableName, process.env['AzureWebJobsStorage']);
var tableStorage = new botbuilder_azure.AzureBotStorage({ gzipData: false }, azureTableClient);
// Create your bot with a function to receive messages from the user
var bot = new builder.UniversalBot(connector);
bot.set('storage', tableStorage);
var request = require('request');
bot.dialog('/', function (session) {
session.send('You said ' + session.message.text);
});
app.js
の中で今回変更するのは、最後のsession.send('You said ' + session.message.text);
です。ここのsession.send
の引数がユーザが投稿したメッセージへの応答内容になります。そしてデフォルトでは'You said ' + session.message.text
を引数とすることでYou said ユーザの投稿メッセージ
と返しています。この部分を以下のように変更します。
(・・・上省略・・・)
bot.dialog('/', function (session) {
// session.send('You said ' + session.message.text);
session.send('Your conversation id is : ' + session.message.address.conversation.id);
});
見てわかるとおり、session.message.text
をsession.message.address.conversation.id
に置き換えています。session.message
はユーザからの投稿メッセージに関する全ての情報を含んでおり、その中からConversation IDを取得するためにsession.message.address.conversation.id
で取り出しています。これはJSON形式で送られてきます。この中身については後述しています。
あとは、実際に自身のSkypeアプリから、このボットが追加されているグループチャット、もしくは1対1チャットでボットに対してメッセージを投稿すると、Conversation IDが返ってきます。なお、グループチャットではボット宛にメッセージを送信しないと反応しないため注意が必要です。つまり、グループチャット上でメッセージとして「@ボット名 適当な投稿メッセージ」を投稿してください。 以下はグループチャットのConversatino IDですが、以下のようなものが返ってきます。
19:34068j05y3p2u7235l5n7jkhbkbk4b5h@thread.skype
ユーザからの投稿メッセージの中身
ユーザがSkype上でボットに対してメッセージを投稿すると、ボットは以下のようなJSONデータを受け取ります。上記のコードでは、session.message
が以下のJSONデータそのものでした。よって、下記を見てわかるとおり、session.message.text
とすればユーザのメッセージ内容(以下では”Hello Bot”)、そしてsession.message.address.conversation.id
とすればConversation IDを取得できることがわかると思います。なお、以下はグループチャットの場合のユーザの投稿メッセージになるため、Conversationの項目の中にisGroup
があり、これがtrue
になっています。
{
"text": "Hello Bot", // ユーザの投稿メッセージ
"type": "message",
"timestamp": "2018-09-16T11:32:33.981Z",
"entities": [{
"mentioned": {
"id": "246l549870345j708j0gjsdphjetoly5"
},
"text": "myBot",
"type": "mention"
}, {
"locale": "ja-JP",
"country": "JP",
"platform": "Windows",
"type": "clientInfo"
}],
"sourceEvent": {
"text": "myBot test2"
},
"attachments": [],
"address": {
"id": "13803852457987",
"channelId": "skype",
"user": {
"id": "3543-79u23j9-v236mjub0p39u56njb093527ub"
},
"conversation": {
"isGroup": true,
"id": "19:34068j05y3p2u7235l5n7jkhbkbk4b5h@thread.skype" // Conversation ID
},
"bot": {
"id": "2834068hn6hg893o2y6hfj8y295346105",
"name": "myBot"
},
"serviceUrl": "https://smba.trafficmanager.net/apis/"
},
"source": "skype",
"agent": "botbuilder",
"user": {
"id": "3543-79u23j9-v236mjub0p39u56njb093527ub"
}
}
}
まとめ
Conversation IDが取得できたら後は実際にSkypeボットに任意のチャットに対してメッセージを投稿させたり、ユーザからのメッセージを受信して応答させたりすることができます。
関連記事
- 公開日:2019/12/19 更新日:2019/12/19
コードなしでボットを作成できるフレームワークBotfront
Botfrontは、GUIのエディタでボットに発言させたい内容やユーザのメッセージに対してどのような応答を返すかを編集してボットを作成できるフレームワークです。また、作成したボットをWebサイトやSlack上で動作させることも可能です。この記事では、Botfrontをインストールしてボットを作成するまでをまとめます。
- 公開日:2019/08/07 更新日:2019/08/07
Hubotを使ってSlackに投稿されたメッセージに応答してシェルスクリプトを実行させる
HubotをSlack上で常駐させることで色々なことができます。ここでは、Hubotをインストールして実際にSlack上に常駐させ、メッセージに応答してHubotが動作するパソコン上でシェルスクリプトを実行させるまでの手順をメモします。
- 公開日:2018/10/31 更新日:2018/10/31
LINEのLIFFアプリを登録する手順と簡単な実例
LIFF(LINE Front-end Framework)はLINEのトークルーム上でWebアプリを呼び出してLINEと連携して動作するアプリのプラットフォームです。ここでは、このLIFFアプリを登録して実際に動作させるまでの手順をメモします。
- 公開日:2018/10/08 更新日:2018/10/08
ユーザの投稿メッセージに応答するSkypeボットをGoogle Apps Scriptで作成する手順
Skypeにてユーザからボットのへの投稿メッセージに応じて適当なメッセージを送り返すボットをGoogle Apps Scriptで作成します。ここではあらかじめ決めたメッセージを返すだけですが、この記事での内容を元に色々な応用に使えると思います。
- 公開日:2018/10/05 更新日:2018/10/05
Skypeにメッセージを投稿するSkypeボットをGoogle Apps Scriptで作成する手順
なユーザの投稿に応答する形ではなく、ボットが主体となって投稿するメッセージをプロアクティブメッセージと呼びます。この記事では、プロアクティブメッセージを任意のSkypeチャットに送信するSkypeボットをGoogle Apps Scriptで作成します。