スマレジ・デベロッパーズ・コミュニティはアーカイブされました。


これまでに投稿いただいた内容は引き続きご覧いただけます。

今後のお問い合わせはこちら

トッピングの取り扱い店舗の変更を検知する方法

現在レート制限の導入に伴い、

極力アプリ側でスマレジのデータを同期し、APIをコールしなくてもデータをアプリ側で取得することを検討しています。

そのため、Webhookを利用して、スマレジ側でデータの修正があった場合は、即座にアプリ側でもデータを更新する仕組みを検討しています。

・メニューの追加・変更・削除

・トッピングの追加・変更・削除

・お好みオーダーの追加・変更・削除

あたりに関しては、WaiterのWebhookで検知し、同期をとることが可能だと考えています。

・トッピンググループの追加・変更・削除

に関しては、POSのWebhook(pos:option-groups)で検知できそうだと考えています。

現在問題になっているのは

・メニューの提供店舗の変更

・トッピングの提供店舗の変更

です。メニュー、トッピングともに提供店舗を変更すると

POSのWebhook(pos:products, edited)が通知されることを確認していますが、

まず、このPOS側のWebhookでは、productIdsが渡されてくるので、あくまでもPOS側の商品IDで、

そのIDが、メニューなのか、トッピングなのかわかりません。

POS側の商品取得APIでProductを取得し、それがメニューなのかトッピングなのか区別をつけることは可能でしょうか?


また、トッピングの場合、そのトッピングがどのトッピンググループに所属しているのか(Waiter側のAPIで店舗毎のトッピンググループは取得できるが、店舗毎に取り扱っているトッピングが取得できないため、productId からトッピンググループを取得し、その店舗のトッピンググループのトッピング内容を更新したい)を取得できないのでしょうか?


POS側の商品取得APIのレスポンスに、productOptionGroupIdが、共通、もしくは店舗毎にあったのですが、トッピンググループに設定されているトッピングを取得してもnullが入ってました。

ベストアンサー

  • September 2023 編集されました 回答済み✓

    @ashizaki

    商品取得APIのレスポンスのdivisionが、

    ・"2"の場合はトッピング、

    ・"0"の場合は、通常のメニュー

    となっていることがわかりました。これは仕様として正しいでしょうか?

    ご認識いただいている通りです。

    商品取得APIのレスポンスのdivisionが、

    ・"2"の場合はトッピング

    ・"0"の場合は通常のメニュー

    です。

    商品取得APIの仕様書にも記載があるためご確認ください。

    ◇商品取得APIの仕様書

    https://www1.smaregi.dev/apidoc/#operation/getItemId


    また、productOptionGroupIdは、トッピングとトッピンググループの関係ではなく、メニューとトッピングの関連付けであることも理解しました。

    productOptionGroupIdは大本メニューとトッピンググループIDの紐づけです。

    (メニューとトッピングの紐づけではございません。)


    以上より、POSのWebhook(pos:products, edited)の検知で、

    POS側の商品取得APIを使えば、それがメニューかトッピングのそれぞれが、どの店舗で取り扱っているかを取得できそうな気がしています。

    上記についてもご認識いただいている通りです。

    Webhook(pos:products)で商品の更新を検知し、productIdをもとに商品取得APIで商品の情報を取得することで、divisionで通常商品かオプション商品か判断可能です。

    またwith_storesで店舗情報を取得することも可能です。

答え

  • その後、いろいろ検討した結果、

    商品取得APIのレスポンスのdivisionが、

    ・"2"の場合はトッピング、

    ・"0"の場合は、通常のメニュー

    となっていることがわかりました。これは仕様として正しいでしょうか?


    また、productOptionGroupIdは、トッピングとトッピンググループの関係ではなく、メニューとトッピングの関連付けであることも理解しました。


    以上より、POSのWebhook(pos:products, edited)の検知で、

    POS側の商品取得APIを使えば、それがメニューかトッピングのそれぞれが、どの店舗で取り扱っているかを取得できそうな気がしています。