question

永岡 由紀子 avatar image
永岡 由紀子 asked

スキルから PDF をプリンターで印刷させたい

Alexa Skill Connectionsの実装を試みています。スキルから PDF をプリンターで印刷させたいです。

Epsonプリンター(EP-879-AB) とはアカウントリンクが済んでおり、Epson Printerスキルからヘルプページが印刷できました。


kun432様が GitHub で公開されているコード(https://github.com/kun432/alexa-skill-connections-sample)を参考に以下のコードを作成しました。

const PrintPDFHandler = {
  canHandle(handlerInput) {
    return (
      handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
      handlerInput.requestEnvelope.request.intent.name === 'PrintPDFIntent'
    );
  },
  async handle(handlerInput) {
    console.log('session');
    const attributes = handlerInput.attributesManager.getSessionAttributes(),
      speakOutput = 'それではプリンタスキルを呼び出して印刷します。';

    return handlerInput.responseBuilder
      .speak(speakOutput)
      .addDirective({
        'type': 'Connections.StartConnection',
        'uri': 'connection://AMAZON.PrintPDF/1',
        'input': {
          '@type': 'PrintPDFRequest',
          '@version': '1',
          'title': 'サンプルのPDF',
          'description': 'スキルコネクションズのサンプルのPDFです。',
          'url': `https://example.com/pdf/sample.pdf`
        },
        'token': 'none'
      })
      .getResponse();
  },
};

const ConnectionsResponseHandler = {
  canHandle(handlerInput) {
    const request = handlerInput.requestEnvelope.request;
    return request.type === 'SessionResumedRequest';
  },
  handle(handlerInput) {
    const statusCode = handlerInput.requestEnvelope.request.cause.status.code;
    const statusMessage = handlerInput.requestEnvelope.request.cause.status.message;
    console.log(`SessionResumedRequest: code: ${statusCode}, msg: ${statusMessage}`);

    let speechText;
    switch (statusCode) {
      case "200": // 成功
        speechText = "印刷を行いました。ご利用ありがとうございました。";
        break;
      case "204": // ユーザキャンセル
        speechText = "またご利用くださいね。";
        break;
      case "227": // 未アカウントリンク
        speechText = "プリンタスキルのアカウントリンクが行われていません。アレクサアプリでプリンタスキルの設定を行ってください。";
        break;
      case "404": // プロバイダなし
        speechText = "プリンタスキルが有効になっていません。アレクサアプリでプリンタスキルを有効にしてください。";
        break;
      default:
        speechText = "ごめんなさい、うまく行かなかったようです。また時間をおいてお試しください。";
        break;
    }
    return handlerInput.responseBuilder
      .speak(speechText)
      .getResponse();
  },
};


結果

地図を印刷して -> それではプリンタスキルを呼び出して印刷します。

-> コンソールの表示(SessionResumedRequest: code: 500, msg: Internal error.)

-> プリンターがまだ接続されていないようです。プリンターを探すように言ってください。

-> ごめんなさい、うまく行かなかったようです。また時間をおいてお試しください。


kun432様は Canonプリンターで成功したとのことですが、手元にCanonの対応プリンターがないためテストできませんでした。

Alexa Skill Connectionsの実装をされて、Epsonプリンターで印刷できた方がいらっしゃいましたら、ご助言いただければ幸いです。

skill connections
10 |5000 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

1 Answer

永岡 由紀子 avatar image
永岡 由紀子 answered

追記の情報)質問者です。印刷関係の検証を続けております。

PrintImage はうまく動作しました。addDirective の部分を以下のコードに変更しました。

            .addDirective({
                "type": "Connections.StartConnection",
                "uri": "connection://AMAZON.PrintImage/1",
                "input": {
                    "@type": "PrintImageRequest",
                    "@version": "1",
                    "title": "Sample",
                    "description": "Sample Image",
                    "imageType": "JPEG",
                    "url": "http://example.com/images/sample.jpg"
                },
                'token': 'none'
            })

PrintWebPage は動作しません。PrintPDF と同様で、

-> プリンターがまだ接続されていないようです。プリンターを探すように言ってください。

とエラーになってしまいます。以下が検証コードです。

            .addDirective({
                "type": "Connections.StartConnection",
                "uri": "connection://AMAZON.PrintWebPage/1",
                "input": {
                    "@type": "PrintWebPageRequest",
                    "@version": "1",
                    "title": "Sample",
                    "description": "Sample WebPage",
                    "url": "https://example.com/"
                },
                'token': 'none'
            })


Epsonプリンターの問題なのか、スキル側の問題なのか、問題の切り分けができず困っています。Canon での検証結果も知りたいです。情報お待ちしております。

10 |5000 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.