このURLにリクエストを送信しようとしました
https://graph.facebook.com/v2.6/PAGE_ID/thread_settings?access_token=PAGE_ACCESS_TOKEN
しかし、うまくいきませんでした。
このURLにリクエストを送信しようとしました
https://graph.facebook.com/v2.6/PAGE_ID/thread_settings?access_token=PAGE_ACCESS_TOKEN
しかし、うまくいきませんでした。
以下のように、API JSON 本体への POST 呼び出しを行います。
curl -X POST -H "Content-Type: application/json" -d '{
"setting_type":"call_to_actions",
"thread_state":"new_thread",
"call_to_actions":[
{
"payload":"USER_DEFINED_PAYLOAD"
}
]
}' "https://graph.facebook.com/v2.6/me/thread_settings?access_token=PAGE_ACCESS_TOKEN"
正常に設定されている可能性がありますが、Facebook ページとの既存の会話が既にあるため、表示されていません。
「Get Started」スレッドを正常に設定した後、既存の会話スレッドを削除して新しい会話スレッドを開始した場合にのみ表示されます。
[開始する] ボタンは、Facebook ページを初めて操作するときにのみ表示されるため、以前にページにメッセージを送信したことがある場合は、Facebook Messenger クライアントからスレッドを削除しない限り、[開始する] が表示されません (モバイルまたはデスクトップのいずれか)。
FBメッセンジャーのドキュメントから:
[ようこそ] 画面と [開始する] ボタンが表示されるには、特定の条件があります。
- これらは、ユーザーが Messenger のページと初めてやり取りしたときにのみレンダリングされます。
- アプリが開発モードの場合、アプリの管理者/開発者/テスターのみが表示できます
- アプリは Webhook のポストバックにサブスクライブする必要があります
私の意見では、より良い解決策は、Microsoft Bot Framework を使用し、その /firstRun を使用してメッセンジャーの開始ボタンを送信することです
function firstRun(session) {
console.log('This user is running our bot the first time')
createUser(session)
platforms.firstRun(session.message.user.id, session.message.address.channelId)
.then((values) => {
for (let value of values) {
if (value.data.firstName && value.data.lastName) {
session.userData.user.profile = value.data
}
}
})
.catch((errors => {
console.log(errors);
}))
reply(session)
session.endDialog()
}
platform.firstRun は次のようになります。
platforms.firstRun = function (userId, channel) {
switch (channel) {
case platforms.channels.emulator:
return Promise.reject('none')
case platforms.channels.facebook:
return platforms.facebook.firstRun(userId)
case platforms.channels.skype:
return Promise.reject('none')
default:
return Promise.reject('none')
}
}
これは、platforms.facebook.firstRun を呼び出します。
platforms.facebook.firstRun = function (userId) {
return Promise.all([
platforms.facebook.sendThread(facebookTemplates.greet(), 'Greeting'),
platforms.facebook.sendThread(facebookTemplates.getStarted(), 'Get Started'),
platforms.facebook.sendThread(facebookTemplates.getPersistentMenu(), 'Persistent Menu'),
platforms.facebook.sendThread(facebookTemplates.getDomainWhitelisting(), 'Domain Whitelisting'),
platforms.facebook.getProfile(userId)
])
}
platform.facebook.sendThread は次のようになります // Facebook グラフ API を呼び出してボットの設定を変更します
platforms.facebook.sendThread = function (template, cmd) {
return new Promise((resolve, reject) => {
// Start the request
request({
url: platforms.facebook.GRAPH_BASE_URI + '/me/thread_settings?access_token=' + endpoints.FACEBOOK_PAGE_ACCESS_TOKEN,
method: 'POST',
headers: { 'Content-Type': 'application/json' },
form: template
},
function (error, response, body) {
if (!error && response.statusCode == 200) {
// Print out the response body
resolve({ status: response.statusCode, data: body })
} else {
// TODO: Handle errors
reject({ status: response.statusCode, data: error })
}
});
})
}
facebookTemplates.getStarted() に注意してください。実際には、以下に示すように開始するための json があります。
templates.getStarted = function () {
return {
setting_type: "call_to_actions",
thread_state: "new_thread",
call_to_actions: [
{
payload: payloads.FACEBOOK_GET_STARTED
}
]
}
}
すべてのチャットボット プラットフォームで最初の実行操作を実行するための、完全にプラグイン可能なコード アーキテクチャ。ここで私のボットで完全に動作します