読者です 読者をやめる 読者になる 読者になる

DMM.comラボエンジニアブログ

DMM.comラボのエンジニアブログです。DMM.comを支える技術について書いています。

Office365+Palmi

こんにちは。 DMM.comラボでロボットを使って遊んでいるコーイチです。

弊社ではロボットを売るための試みとして、様々なWebサービスとの連携デモを行っています。

デモはデモであって、ありていにいってハリボテなので、色々と恥ずかしく、要するにソースコードは公開できないのですが、こんなこともやっていますよ。 という紹介をさせていただきます。

今回はMicrosoftさんのサービスと連携してみました。 こんな感じです。

f:id:dmmlabotech:20161025193146p:plain

何かというと、Office 365のOutlookにメールを送ると、ギリギリリアルタイムと言えなくもないラグでPalmiがメール内容を喋るものです。

ビジネス寄りなデモなので、Outlook.comではなく、Office 365のOutlookです。

こんな感じに動きます。

youtu.be

だからどうした、という感じではありますが、ここから何かが生まれるかもしれません。

さて、開発の苦労話をしてこの記事を終わりたいと思います。

デモなので Graph だろ

アプリケーションからOffice 365にアクセスするには、大きく以下の2手法があります。

Office 365 APIのドキュメントには以下のようなことが書かれていました。

Office 365 API の機能は Microsoft Graph や、Outlook、OneDrive、OneNote、Planner Office Graph など、別の Microsoft サービスから、単一のエンドポイントを経由して単一のアクセス トークンでアクセス可能な API を含む統合 API 経由でも使用できます。可能な場合は、アプリで Microsoft Graph を使用することをお勧めします。

デモなので、推奨されているGraphを使うのが正道でしょう。

こんな感じで使いました。

  • 認証・認可
    • Application-Only Token で認証
    • Administrator Consent で認可
  • APIバージョン
    • 2016/10/20現在 /subscriptions は Application-Only Token 未対応
    • beta 版APIを用いた
  • Webhooks API
    • {tennantId}/users/{userPrincipal}/messages をSubscribe

デモ対象や、便宜上のトークン取り回しの良さからWebアプリケーション上で Application-Only Token を取得しました。 が、そうしたら目的のAPIが未対応だったんですね。

400 Bad Request
   "error": {
     "code": "",
     "message": "Application-Only subscription requests are not currently supported for this api version."

こんなレスポンスが返ってきたときには、描いていた青写真が実現できそうになくて顔が青くなりました。

そんな時、天の声(日本Microsoftのエバンジェリストの方の案内)が聞こえてきました。

「beta版APIなら動くかもしれません」

ビンゴ。

デモなのでベータ版でも全然OK、と相成りました。

/subscriptions リソースは、指定したリソースの変化を購読できるリソースです。 今回はメール(messagesリソース)の生成(created)を購読することで、新着メールが通知されるようにしました。

中々使い出のあるAPIだと思います。

ロボットをIoTデバイスと見立てて IoT Hub だ

今年、IT業界でいい感じにバズワードとなっているIoT。 Azure IoT HubはIoTデバイスを管理、相互通信するためのPaaSです。

流行りに乗っかるには使うしかない。

というわけでこんな感じで使いました。

  • C2D メッセージ
    • Cloud To Device
    • リアルタイムな通知に用いた
    • Webhook をApp Service上のAPI Appで受け付け、エンキュー
  • Microsoft Azure IoT device SDK for C
    • Palmi からのアクセスに用いた

今回は大して生かしてないですが、IoT Hub は D2Cメッセージやデバイス管理など、ロボットと相性が良いサービスなので、機会があれば他の機能も試して行きたいです。

SDK for C がサポートするOSはUbuntuだと14LTS~で、Palmiのそれとは少々マッチングしないです。 ARM向けにクロスコンパイルする必要もあったり、非常にモンキーなパッチを当ててビルドしたので、とても見せられないものなのでした。

夢追い人

ロボットを使ったアプリケーションはまだまだ夢が多いですが、追いかけなければ夢は実現しません。

これからも(ロボットチームである限りは)追いかけていきたいと思います。