結論から言うと
clovaからLINE botにメッセージを送信するときにはmessaging APIの中のpush Messageを使えば送信できます。そのためにはbotのアカウントはclovaスキルを作成したときのブロバイダと一致していなければいけません。さらにclovaから送信されるwebhookリクエストの中からユーザを特定するためのuserIdを取り出す必要があります。
がここで問題が
久しぶりに自分が作ったclovaスキルをデプロイすると、何故かエラーが起きていました。よく見るとuserIdの参照ができていないようです。
@clova.handle.intent("SampleIntent")
def reason_handler(clova_request):
UserID = clova_request.user_id
keyword = clova_request.slot_value("Reason")
app.logger.debug(keyword)
app.logger.debug("Intent started")
app.logger.debug("UserID: {}".format(UserID))
app.logger.debug("Get Word: {}".format(keyword))
このうちのclova_request.user_id
の参照が正しくないようです。これを作成したのが2018年末から2019年年始にかけてのことだったのですが、その時は動いてたんです。そのころから仕様が変わっているのかな?と疑問に思って調べてみました。するとこのリンクにたどり着き、こんな記述を見つけました。
@clova.handle.intent("TurnOn")
def turn_on_handler(clova_request):
user_id = clova_request.context.user.id
slots = clova_request.slots
home_state = user_home_state.get(user_id, HomeState())
device_name = None
つまり、clova_request.user_id
をclova_request.context.user.id
に変更してみました。するともスキルは問題なく動作し、LINEにメッセージを送信することができました。
でも他に変更がありそう…
と思って調べてみたらClova developer centerのアップデート履歴にしっかりアップデート内容が記載されていました。そこは流石に良心的ですね…
宣伝
現在スキルストアで「バーチャル面接」がリリースされています。LINE botと連携して楽しめるので、是非使ってみてください!