Edited at

ClovaからLINEにメッセージを送る(python編)


結論から言うと

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_idclova_request.context.user.idに変更してみました。するともスキルは問題なく動作し、LINEにメッセージを送信することができました。


でも他に変更がありそう…

と思って調べてみたらClova developer centerのアップデート履歴にしっかりアップデート内容が記載されていました。そこは流石に良心的ですね…


宣伝

現在スキルストアで「バーチャル面接」がリリースされています。LINE botと連携して楽しめるので、是非使ってみてください!