Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update dependency bottender to v1 #11

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

renovate[bot]
Copy link

@renovate renovate bot commented Dec 14, 2019

WhiteSource Renovate

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
bottender (source) 0.14.34 -> 1.5.4 age adoption passing confidence

Release Notes

Yoctol/bottender

v1.5.4

Compare Source

line

  • [deprecated] add deprecated warning to the following methods:

  • context.useAccessToken

  • context.replyButtonTemplate

  • context.push

  • context.pushText

  • context.pushImage

  • context.pushVideo

  • context.pushAudio

  • context.pushLocation

  • context.pushSticker

  • context.pushImagemap

  • context.pushFlex

  • context.pushTemplate

  • context.pushButtonTemplate

  • context.pushButtonsTemplate

  • context.pushConfirmTemplate

  • context.pushCarouselTemplate

  • context.pushImageCarouselTemplate

  • context.send

  • context.sendImage

  • context.sendVideo

  • context.sendAudio

  • context.sendLocation

  • context.sendSticker

  • context.sendImagemap

  • context.sendFlex

  • context.sendTemplate

  • context.sendButtonTemplate

  • context.sendButtonsTemplate

  • context.sendConfirmTemplate

  • context.sendCarouselTemplate

  • context.sendImageCarouselTemplate

v1.5.3

Compare Source

  • [deps] remove prompt-confirm.

v1.5.2

Compare Source

  • [deps] update dependencies.

v1.5.1

Compare Source

  • [new] Server: support experimental custom connectors (#​781):
// bottender.config.js

module.exports = {
  channels: {
    mychannel: {
      enabled: true,
      path: '/webhooks/mychannel',
      connector: new MyConnector(/* ... */),
    },
  },
};
  • [new]: export clients, factories from messaging-apis (#​806):
const {
  // clients
  MessengerClient,
  LineClient,
  TelegramClient,
  SlackOAuthClient,
  ViberClient,
  TwilioClient,

  // factories
  Messenger,
  Line,
} = require('bottender');
  • [new] Bot: implement the onRequest option (#​773):
// bottender.config.js

function onRequest(body, requestContext) {
  console.log({
    body,
    requestContext,
  });
}

module.exports = {
  channels: {
    messenger: {
      // ...
      onRequest,
    },
    whatsapp: {
      // ...
      onRequest,
    },
    line: {
      // ...
      onRequest,
    },
    telegram: {
      // ...
      onRequest,
    },
    slack: {
      // ...
      onRequest,
    },
    viber: {
      // ...
      onRequest,
    },
  },
};
  • [new] RequestContext: add id to RequestContext (#​774)
  • [fix] Server: should await for connector.preprocess (#​771)
  • [deps] upgrade messaging-apis to v1.0.0

messenger

  • [new] get/set/delete user level persistent menu for context user (#​790):
await context.getUserPersistentMenu();
// [
//   {
//     locale: 'default',
//     composerInputDisabled: false,
//     callToActions: [
//       {
//         type: 'postback',
//         title: 'Restart Conversation',
//         payload: 'RESTART',
//       },
//       {
//         type: 'web_url',
//         title: 'Powered by ALOHA.AI, Yoctol',
//         url: 'https://www.yoctol.com/',
//       },
//     ],
//   },
// ]

await context.setUserPersistentMenu([
  {
    locale: 'default',
    composerInputDisabled: false,
    callToActions: [
      {
        type: 'postback',
        title: 'Restart Conversation',
        payload: 'RESTART',
      },
      {
        type: 'web_url',
        title: 'Powered by ALOHA.AI, Yoctol',
        url: 'https://www.yoctol.com/',
      },
    ],
  },
]);

await context.deleteUserPersistentMenu();

line

  • [new] support line multi-channel using getConfig (#​770):
// bottender.config.js
module.exports = {
  channels: {
    line: {
      enabled: true,
      path: '/webhooks/line/:channelId',
      async getConfig({ params }) {
        console.log(params.channelId);
        // ...get the config from the API, database or wherever you like when every time receiving a new event
        return {
          accessToken,
          channelSecret,
        };
      },
    },
  },
};
  • [new] add emojis on LINE text message event (#​793):
if (context.event.isMessage) {
  context.event.message.emojis;
  // [
  //   {
  //     index: 14,
  //     length: 6,
  //     productId: '5ac1bfd5040ab15980c9b435',
  //     emojiId: '001',
  //   },
  // ]
}
  • [new] add LineContext.getMembersCount method (#​824):
await context.getMembersCount();
// 10

telegram

  • [new] add TelegramEvent.isPollAnswer and TelegramEvent.pollAnswer (#​745):
if (context.event.isPollAnswer) {
  console.log(context.event.pollAnswer);
}
  • [new] add pollAnswer to telegram routes:
const { router, telegram } = require('bottender/router');

async function HandlePollAnswer(context) {
  // ...
}

function App() {
  return router([telegram.pollAnswer(HandlePollAnswer)]);
}
  • [new] add TelegramContext.answerCallbackQuery (#​750):
await context.answerCallbackQuery({
  url: 'https://example.com/',
});

slack

  • [new] slack route accept any requests by passing * (#​758):
const { router, slack } = require('bottender/router');

async function HandleAllEvent(context) {
  // ...
}

function App() {
  return router([slack.event('*', HandleAllEvent)]);
}
  • [fix] fix context.views.open in slack home tab (#​809)
  • [fix] fix route slack event (#​841)
  • [fix] fix slack session when channel id is null (#​802)
  • [docs] update slack routes improvement (#​759)
  • [example] example: slack update and delete (#​769)
  • [example] slack home tab (#​829)
  • [example] slack modal on home (#​827)
  • [example] slack modal update (#​825)
  • [example] slack modal form (#​828)

dialogflow

  • [deps] use @google-cloud/dialogflow v4

create-bottender-app

  • [fix] fix context concat and env name (#​859)

bottender-facebook

  • [new] add new connector - FacebookConnector to experiment using same connector for Messenger and Facebook.
// bottender.config.js
const { FacebookConnector } = require('@​bottender/facebook');

module.exports = {
  channels: {
    facebook: {
      enabled: true,
      path: '/webhooks/facebook',
      connector: new FacebookConnector({
        // The top level access token should be provided for the batch requests.
        accessToken: process.env.FACEBOOK_ACCESS_TOKEN,
        appSecret: process.env.FACEBOOK_APP_SECRET,
        verifyToken: process.env.FACEBOOK_VERIFY_TOKEN,
        origin: process.env.FACEBOOK_ORIGIN,
        async mapPageToAccessToken(pageId) {
          console.log(pageId);
          return accessToken;
        },
      }),
      onRequest: onFacebookRequest,
    },
  },
};

v1.4.10

Compare Source

  • [fix] add Interaction type for route slack.event (#​842)

v1.4.9

Compare Source

  • [fix] MongoSessionStore: enable useUnifiedTopology to avoid warning (#​831)

v1.4.8

Compare Source

  • [fix] lock messaging-apis packages on specific version.

v1.4.7

Compare Source

  • [fix] add a workaround to support express behind trust proxies (for example: nginx) with:
server.enable('trust proxy');

// or
server.set('trust proxy', true);

v1.4.6

Compare Source

messenger

  • [fix] cli: remove deprecated properties on messenger profiles (including home_url).

v1.4.5

Compare Source

v1.4.4

Compare Source

slack

  • [fix] convert slack interactive message event to camelcase (#​755).

v1.4.3

Compare Source

  • [type] use string instead enum to compare.

v1.4.2

Compare Source

  • [type] improve TS types of the getClient function (#​744)

v1.4.1

Compare Source

create-bottender-app

  • [fix] fix context concat and env name #​859

v1.4.0

Compare Source

  • [new] route: provides namespace.any for better readability (#​719):
function App() {
  return router([
    messenger.any(HandleMessenger),
    line.any(HandleLine),
    slack.any(HandleSlack),
    telegram.any(HandleTelegram),
    viber.any(HandleViber),
    whatsapp.any(HandleWhatsapp),
  ]);
}
  • [new] support custom session store (#​732):
// bottender.config.js

const { MemorySessionStore } = require('bottender');

module.exports = {
  session: {
    driver: 'memory2',
    stores: {
      memory2: new MemorySessionStore();
    },
  },
};
  • [fix] context: let getters return literal instead of string type (#​724)
  • [type] improve types of withProps (#​731)

messenger

Support event.isReaction & event.react:

function App(context) {
  if (context.event.isReaction) {
    console.log(context.event.reaction);
    // {
    //   reaction: 'smile',
    //   emoji: '\u{2764}\u{FE0F}',
    //   action: 'react',
    //   mid: 'mid.$cAAE1UUyiiwthh0NPrVbVf4HFNDGl',
    //  }
  }
}

Support detect events in routers:

const { router, messenger } = require('bottender/router');

function App() {
  return router([
    messenger.reaction.react(HandleReactionReact),
    messenger.reaction.unreact(HandleReactionUnreact),
    messenger.reaction(HandleReaction),
  ]);
}

async function HandleReactionReact(context) {}
async function HandleReactionUnreact(context) {}
async function HandleReaction(context) {}
  • [new] add context.sendOneTimeNotifReqTemplate (#​722):
context.sendOneTimeNotifReqTemplate({
  title: '<TITLE_TEXT>',
  payload: '<USER_DEFINED_PAYLOAD>',
});
  • [type] improve types of MessengerContext send methods (#​729)

line

  • [new] export LineNotify (#​721):
const { LineNotify } = require('bottender');

bottender-dialogflow

  • [new] support text responses filled on Dialogflow.

create-bottender-app

  • [new] add lib es2018-es2020 by default.
  • [fix] let App action accept Action as return value (#​734)

v1.3.5

Compare Source

  • [fix] put router.d.ts into package files whitelist

v1.3.4

Compare Source

  • [fix] fix bottender/router import statement in TypeScript (#​715)

v1.3.3

Compare Source

line

v1.3.2

Compare Source

  • [fix] improve the error message of missing entry action (#​705).
  • [fix] fix responding with application/json when using custom server (#​700).

line

  • [deps] update messaging-api-line.

create-bottender-app

  • [fix] rewrite generated README (#​708).
  • [fix] install eslint-plugin-import for --typescript.
  • [fix] add dist to .gitignore for TypeScript (#​697).

v1.3.0

Compare Source

  • [type] export types from messaging-apis (#​661):
import {
  MessengerTypes,
  WhatsappTypes,
  LineTypes,
  TelegramTypes,
  SlackTypes,
  ViberTypes,
} from 'bottender';
  • [deps] update dependencies.

whatsapp

// bottender.config.js

module.exports = {
  channels: {
    whatsapp: {
      enabled: true,
      path: '/webhooks/whatsapp',
      accountSid: process.env.WHATSAPP_ACCOUNT_SID,
      authToken: process.env.WHATSAPP_AUTH_TOKEN,
      phoneNumber: process.env.WHATSAPP_PHONE_NUMBER,
    },
  },
};

slack

  • [new] support Slack signing secret:
// bottender.config.js

module.exports = {
  channels: {
    slack: {
      enabled: true,
      path: '/webhooks/slack',
      accessToken: process.env.SLACK_ACCESS_TOKEN,
      signingSecret: process.env.SLACK_SIGNING_SECRET,
      // verificationToken: process.env.SLACK_VERIFICATION_TOKEN, // deprecated, use signingSecret
    },
  },
};
  • [new] add support for Slack slash commands (#​166):
async function App(context) {
  if (context.event.isCommand) {
    await context.sendText(
      `I received slash command '${context.event.command}' with arguments: '${context.event.text}'`
    );
  }
}

line

  • [deps] update messaging-api-line to support narrowcast.

create-bottender-app

  • [new] use signing secret in create-bottender-app (#​659).
  • [new] add TypeScript support to bottender dev (#​654).

cli

  • [new] support bottender dev --inspect=HOST:PORT (#​656).

v1.2.3

Compare Source

slack

  • [fix] fix a typo in Slack error message #​671

v1.2.2

Compare Source

create-bottender-app

  • [fix] Fixed wrong npm scripts in the instruction.

v1.2.1

Compare Source

  • [fix] install @​types packages in package dependencies instead of workspace.

v1.2.0

Compare Source

context.intent; // null

context.setIntent('greeting');

context.intent; // 'greeting'
  • [new] Added context.setAsHandled() and context.setAsNotHandled() for tracking handling status (#​624):
context.setAsHandled();

context.isHandled; // true

context.setAsNotHandled();

context.isHandled; // false
  • [new] Added getSessionStore helper function to get the session store that configured by bottender.config.js (#​633):
const { getSessionStore } = require('bottender');

const sessionStore = getSessionStore();
  • [new] Added getClient helper function to access underlying messaging client configured by bottender.config.js (#​634):
const { getClient } = require('bottender');

const messenger = getClient('messenger');

messenger.sendText(USER_ID, 'Hello!', { tag: 'CONFIRMED_EVENT_UPDATE' });

const line = getClient('line');

line.pushText(USER_ID, 'Hello!');
slack
  • [new] add includeBotMessages option for interacting with bot_message (#​635):
// bottender.config.js

module.exports = {
  // ...
  slack: {
    enabled: true,
    path: '/webhooks/slack',
    accessToken: process.env.SLACK_ACCESS_TOKEN,
    verificationToken: process.env.SLACK_VERIFICATION_TOKEN,
    includeBotMessages: true, // add this line
  },
};

Then you can use context.event.isBotMessage to determine if the event is a bot message event:

module.exports = function App(context) {
  if (context.event.isBotMessage) {
    console.log(context.event.rawEvent.botId);
  }
};

v1.1.3

Compare Source

  • [fix] fix(Bot, LineConnector, MessengerConnector): when receiving multiple events, construct session with event instead of request #​621

v1.1.2

Compare Source

  • [fix] fix(DevServer): call super.prepare() in prepare method to avoid overwriting parent method

v1.1.1

Compare Source

  • [fix] improve error message when there are errors in bottender.config.js (#​611)

v1.1.0

Compare Source

  • [new] improve error messages for bots configuration:
LINE channel secret is required. Please make sure you have filled it correctly in `bottender.config.js` or `.env` file.

Instead of:

TypeError [ERR_INVALID_ARG_TYPE]: The "key" argument must be one of type Buffer, TypedArray, DataView, string, or KeyObject. Received type undefined
messenger
  • [new] Added Messenger routes:
const { router, messenger } = require('bottender/router');

function Action() {
  // ...
}

function App() {
  return router([
    messenger.message(Action),
    messenger.accountLinking.linked(Action),
    messenger.accountLinking.unlinked(Action),
    messenger.accountLinking(Action),
    messenger.checkoutUpdate(Action),
    messenger.delivery(Action),
    messenger.echo(Action),
    messenger.gamePlay(Action),
    messenger.passThreadControl(Action),
    messenger.takeThreadControl(Action),
    messenger.requestThreadControl(Action),
    messenger.appRoles(Action),
    messenger.optin(Action),
    messenger.payment(Action),
    messenger.policyEnforcement(Action),
    messenger.postback(Action),
    messenger.preCheckout(Action),
    messenger.read(Action),
    messenger.referral(Action),
    messenger.standby(Action),
    messenger(Action),
  ]);
}
line
  • [new] Added LINE routes:
const { router, line } = require('bottender/router');

function Action() {
  // ...
}

function App() {
  return router([
    line.message(Action),
    line.follow(Action),
    line.unfollow(Action),
    line.join(Action),
    line.leave(Action),
    line.memberJoined(Action),
    line.memberLeft(Action),
    line.postback(Action),
    line.beacon.enter(Action),
    line.beacon.banner(Action),
    line.beacon.stay(Action),
    line.beacon(Action),
    line.accountLink(Action),
    line.things.link(Action),
    line.things.unlink(Action),
    line.things.scenarioResult(Action),
    line.things(Action),
    line(Action),
  ]);
}
slack
  • [new] Implemented native Slack chat APIs, see Slack API Doc for further information.
    e.g.
context.chat.postMessage(...);
context.chat.postEphemeral(...);
context.chat.update(...);
context.chat.delete(...);
context.chat.meMessage(...);
context.chat.getPermalink(...);
context.chat.scheduleMessage(...);
context.chat.deleteScheduledMessage(...);
context.chat.scheduledMessages.list(...);

context.postMessageandcontext.postEphemeralis now deprecated, usecontext.chat.postMessageandcontext.chat.postEphemeral instead.

  • [new] Implemented native Slack views APIs, see Slack API Doc for further information.
    e.g.
context.views.open(...);
context.views.publish(...);
context.views.push(...);
context.views.update(...);

For views, we keep channelId in privateMetadata to get session key for upcoming view events. (ref)

  • [new] Added Slack routes:
const { router, slack } = require('bottender/router');

function Action() {
  // ...
}

function App() {
  return router([
    slack.message(Action),
    slack.event('pin_added', Action),
    slack.event('star_added', Action),
    slack(Action),
  ]);
}
telegram
  • [new] Added Telegram routes:
const { router, telegram } = require('bottender/router');

function Action() {
  // ...
}

function App() {
  return router([
    telegram.message(Action),
    telegram.editedMessage(Action),
    telegram.channelPost(Action),
    telegram.editedChannelPost(Action),
    telegram.inlineQuery(Action),
    telegram.chosenInlineResult(Action),
    telegram.callbackQuery(Action),
    telegram.shippingQuery(Action),
    telegram.preCheckoutQuery(Action),
    telegram.poll(Action),
    telegram(Action),
  ]);
}
viber
  • [new] Added Viber routes:
const { router, viber } = require('bottender/router');

function Action() {
  // ...
}

function App() {
  return router([
    viber.message(Action),
    viber.subscribed(Action),
    viber.unsubscribed(Action),
    viber.conversationStarted(Action),
    viber.delivered(Action),
    viber.seen(Action),
    viber.failed(Action),
    viber(Action),
  ]);
}

v1.0.8

Compare Source

  • [fix] fix(Bot, LineConnector, MessengerConnector): when receiving multiple events, construct session with event instead of request #​621

v1.0.7

Compare Source

  • [fix] fix(DevServer): call super.prepare() in prepare method to avoid overwriting parent method

v1.0.6

Compare Source

  • [fix] session should never expire by default #​595

v1.0.5

Compare Source

  • [fix] move init session and bots into server prepare step #​589

v1.0.4

Compare Source

  • [fix] session: use Windows safe key separator for file session

v1.0.3

Compare Source

  • [fix] server: require Bot using pascal case

v1.0.2

Compare Source

  • [fix] server: add prepare support for production mode.

v1.0.1

Compare Source

messenger
  • feat(messenger): add fields support to context.getUserProfile():
const user = await context.getUserProfile({
  fields: [
    'id',
    'name',
    'first_name',
    'last_name',
    'profile_pic',
    'locale',
    'timezone',
    'gender',
  ],
});
  • fix(example): fix bottender.config.js in messenger-typing example
line
  • fix(line): set shouldBatch to false after handlerDidEnd has been called. This may be the best way to handle errors in LINE:
module.exports = async function HandleError(context, props) {
  console.error(props.error);
  if (process.env.NODE_ENV === 'development') {
    await context.pushText('There are some unexpected errors happened. Please try again later, sorry for the inconvenience.');
    await context.pushText(props.error.stack);
  } else if (!context.isReplied) {
    await context.replyText('There are some unexpected errors happened. Please try again later, sorry for the inconvenience.'
  }
  if (process.env.NODE_ENV === 'production') {
    // send your error to the error tracker, for example: Sentry
  }
};
telegram
  • feat(telegram): add telegram context.editMessageMedia():
await context.editMessageMedia(66, { type: 'photo', media: 'xxx.png' });

v1.0.0

Compare Source

  • The whole codebase has been fully rewritten with TypeScript.
  • The repository becomes a lerna monorepo.
  • [new] A brand-new project creator - create-bottender-app. You can use following command to create your new bot:
npx create-bottender-app my-app
  • [new] Implement new runner and bottender start cli. It finds index.js entry and bottender.config.js config file then executes accordingly:
bottender start

To enable console mode:

bottender start --console
  • [new] Add new development mode via bottender dev cli:
bottender dev
bottender dev --console

The bot server will be restarted after changing the files.

  • [new] Add several recommended ways to organize chatbot dialogs and features:

Action:

async function SayHi(context) {
  await context.sendText('hi');
}

Pass Props to Action:

const { withProps } = require('bottender');

async function SayHi(context, { name }) {
  await context.sendText(`hi! ${name}.`);
}

async function App() {
  return withProps(SayHi, { name: 'John' });
}

Router:

const { router, text } = require('bottender/router');

async function SayHi(context) {
  await context.sendText('Hi!');
}

async function SayHello(context) {
  await context.sendText('Hello!');
}

async function App() {
  return router([
    text('hi', SayHi), // return SayHi when receiving hi text message
    text('hello', SayHello), // return SayHello when receiving hello text message
  ]);
}

Chain:

const { chain } = require('bottender');

function RuleBased(context, props) {
  if (context.event.text === 'hi') {
    // discontinue and return SayHi
    return SayHi;
  }
  // continue to next
  return props.next;
}

function MachineLearningBased(context, props) {
  /* ...skip */
}

function HumanAgent(context, props) {
  /* ...skip */
}

function App() {
  return chain([
    // will execute in following order
    RuleBased,
    MachineLearningBased,
    HumanAgent,
  ]);
}
  • [new] Add _error.js entry support for error handling:
// _error.js
module.exports = async function HandleError(context, props) {
  await context.sendText(
    'There are some unexpected errors happened. Please try again later, sorry for the inconvenience.'
  );
  console.error(props.error);
  if (process.env.NODE_ENV === 'production') {
    // send your error to the error tracker, for example: Sentry
  }
  if (process.env.NODE_ENV === 'development') {
    await context.sendText(props.error.stack);
  }
};
  • [new] Add better custom server support
  • [breaking] middleware and Handlers has been moved to @bottender/handlers package. You can install it from registry:
npm install @&#8203;bottender/handlers

// or using yarn:
yarn add @&#8203;bottender/handlers

And import them like this:

const {
  middleware,
  Handler,
  MessengerHandler,
  LineHandler,
  SlackHandler,
  TelegramHandler,
  ViberHandler,
} = require('@&#8203;bottender/handlers');
  • [breaking] transform all context method parameters to camelcase:

Messenger -

context.sendGenericTemplate([
  {
    title: "Welcome to Peter's Hats",
    imageUrl: 'https://petersfancybrownhats.com/company_image.png',
    subtitle: "We've got the right hat for everyone.",
    defaultAction: {
      type: 'web_url',
      url: 'https://peterssendreceiveapp.ngrok.io/view?item=103',
      messengerExtensions: true,
      webviewHeightRatio: 'tall',
      fallbackUrl: 'https://peterssendreceiveapp.ngrok.io/',
    },
    buttons: [
      {
        type: 'postback',
        title: 'Start Chatting',
        payload: 'DEVELOPER_DEFINED_PAYLOAD',
      },
    ],
  },
]);

Slack -

context.postMessage({
  blocks: [
    {
      type: 'section',
      text: {
        type: 'plain_text',
        text: 'You updated the modal!',
      },
    },
    {
      type: 'image',
      imageUrl: 'https://media.giphy.com/media/SVZGEcYt7brkFUyU90/giphy.gif',
      altText: 'Yay! The modal was updated',
    },
  ],
});

Telegram -

context.sendMessage('hi', {
  disableWebPagePreview: true,
  disableNotification: true,
});

Viber -

context.sendFile({
  media: 'http://www.images.com/file.doc',
  size: 10000,
  fileName: 'name_of_file.doc',
});
  • [breaking] transform all event attributes to camelcase:
context.event.rawEvent; // all keys is camelcase in this object
  • [breaking] rename skipProfile to skipLegacyProfile, and set to true by default

  • [breaking] unify requestContext (#​541)

  • [deps] update messaging-apis to v1

  • [examples] Rewrite all examples for Bottender v1

  • [docs] A brand-new website with new docs - https://bottender.js.org?new

messenger
  • [new] add pageId config to automatically add subscribe app in bottender messenger webhook set.
  • [removed] get-started, greeting, persistent-menu, whitelisted-domains cli subcommands has been removed. Use profile instead:
bottender messenger profile get
bottender messenger profile set
bottender messenger profile delete
  • [removed] Remove deprecated context.sendAirlineFlightUpdateTemplate().
line
  • [new] Implement context.getMessageContent(). You can use it to get received media content:
async function App(context) {
  if (context.event.isImage || context.event.isVideo || context.event.isAudio) {
    const buffer = await context.getMessageContent();
  }
}
  • [new] LineBot: Set sendMethod to reply and shouldBatch to true by default.
  • [removed] legacy menu cli subcommand has been removed.
slack
  • [new] add block kits support:
context.postMessage({
  blocks: [
    {
      type: 'section',
      text: {
        type: 'plain_text',
        text: 'You updated the modal!',
      },
    },
    {
      type: 'image',
      imageUrl: 'https://media.giphy.com/media/SVZGEcYt7brkFUyU90/giphy.gif',
      altText: 'Yay! The modal was updated',
    },
  ],
});
  • [fix] use token in payload when received a JSON string payload.
telegram
  • [new] implement context.sendAnimation():
context.sendAnimation('xxx.mp4');
  • [new] implement context.sendPoll()
const options = ['a', 'b'];

context.sendPoll(question, options);
  • [breaking] add messageId to args for all function need messageId:
context.editMessageText('<MESSAGE_ID>', text);
context.editMessageCaption('<MESSAGE_ID>', caption);
context.editMessageReplyMarkup('<MESSAGE_ID>', replyMarkup);
context.editMessageLiveLocation('<MESSAGE_ID>', location);
context.stopMessageLiveLocation('<MESSAGE_ID>');

v0.15.18

Compare Source

line
  • [deps] bump messaging-api-line to 0.7.18 to support LINE domain changes.

v0.15.17

Compare Source

line
  • [new] add member join/leave event to LineEvent
event.isMemberJoined;
event.memberJoined;
event.isMemberLeft;
event.memberLeft;

v0.15.16

Compare Source

  • [deps] upgrade messaging-api-messenger to 0.7.16

v0.15.15

Compare Source

messenger
  • [new] Add page.id to Messenger sessions:
session.page.id;
line
  • [new] Add skipProfile to LinekBot and LinekConnector.
  • [new] Add destination to LineEvent.
slack
  • [new] Add skipProfile to SlackBot and SlackConnector.
telegram
  • [fix] Add missing cli alias -w for --webhook.

v0.15.14

Compare Source

messenger
  • [new] provide useful information when setting webhook

v0.15.13

Compare Source

  • [new] Add context.usePersona:
context.usePersona('<PERSONA_ID>');
await context.sendText('Hello');
await context.sendText('World');

v0.15.12

Compare Source

messenger
  • [new] Add skipProfile option to MessengerBot and MessengerConnector to skip auto updating user profile:
const bot = new MessengerBot({
  accessToken: ACCESS_TOKEN,
  appSecret: APP_SECRET,
  skipProfile: true,
});

v0.15.11

Compare Source

messenger
  • [new] Add skipAppSecretProof option to MessengerBot and MessengerConnector:
const bot = new MessengerBot({
  accessToken: ACCESS_TOKEN,
  appSecret: APP_SECRET,
  skipAppSecretProof: true,
});

v0.15.10

Compare Source

  • [new] platform bots: add origin option for testing purpose:
new MessengerBot({
  // ...
  origin: 'https://mydummytestserver.com',
});
new LineBot({
  // ...
  origin: 'https://mydummytestserver.com',
});
new SlackBot({
  // ...
  origin: 'https://mydummytestserver.com',
});
new ViberBot({
  // ...
  origin: 'https://mydummytestserver.com',
});
new TelegramBot({
  // ...
  origin: 'https://mydummytestserver.com',
});
messenger
  • [fix] update Messenger profile_pic check logic
  • [fix] fix persona cli error messages

v0.15.9

Compare Source

messenger
  • [new] Add CLI commands for Messenger persona API:

List all personas:

$ bottender messenger persona list

Create a new persona with name and profile picture url:

$ bottender messenger persona create --name <PERSONA_NAME> --pic <PROFILE_IMAGE_URL>

Get persona by persona ID:

$ bottender messenger persona get --id <PERSONA_ID>

Delete persona by persona ID:

$ bottender messenger persona delete --id <PERSONA_ID>

v0.15.8

Compare Source

  • [new] Add sessionStore.all() to fetch all of sessions from the store:
// for those session stores
const sessionStore = new MemorySessionStore(500);
const sessionStore = new MongoSessionStore('mongodb://localhost:27017/');
const sessionStore = new FileSessionStore();
const sessionStore = new RedisSessionStore();
const sessions = await sessionStore.all();
  • [deps] update messaging-apis (which support messenger persona api)

v0.15.7

Compare Source

  • [new] upgrade messaging-apis, so now we can use DEBUG env variable to enable request debugger:
DEBUG=messaging-api*
  • [fix] fix ConsoleBot recognize symbol as _methodMissing (#​333)
  • [deps] upgrade dependencies

v0.15.6

Compare Source

line
  • [new] make sure all of methods support quick reply (#​331):
context.sendText('hahaha', {
  quickReply: {
    items: [
      {
        type: 'action',
        action: {
          type: 'cameraRoll',
          label: 'Send photo',
        },
      },
      {
        type: 'action',
        action: {
          type: 'camera',
          label: 'Open camera',
        },
      },
    ],
  },
});
telegram
  • [new] add isReplyToMessage, replyToMessage (#​330):
event.isReplyToMessage;
event.replyToMessage;

v0.15.5

Compare Source

slack
  • [fix] get correct channel id from more slack event format

v0.15.4

Compare Source

  • [new] add debugger for sync response
DEBUG=bottender:response

print:

bottender:response Outgoing response:
bottender:response {
bottender:response   body: {
bottender:response   }
bottender:response }

Useful when debugging synchronized connectors.

console
  • [fix] makes context.platform consistent with context.session.platform

v0.15.3

Compare Source

console
  • [new] Add mockPlatform option:
const bot = new ConsoleBot({
  fallbackMethods: true,
  mockPlatform: 'messenger',
});

bot.connector.platform; // 'messenger'
bot.onEvent((context) => {
  context.platform; // 'messenger'
});

v0.15.2

Compare Source

messenger
  • [new] Add context.isThreadOwner():
await context.isThreadOwner(); // true | false

v0.15.1

Compare Source

line
  • [new] add member join/leave event to LineEvent
event.isMemberJoined;
event.memberJoined;
event.isMemberLeft;
event.memberLeft;

v0.15.0

Compare Source

v0.15 is the second major version after we open sourced Bottender. In this version, we introduce a lot of helpful, community requested features based on Messaging APIs v0.7.

  • [new] add context.requestContext:

Express, Micro, Restify:

context.requestContext; // { req, res }

Koa:

context.requestContext; // ctx in koa
  • [new] add more debug logs and key change (#​239, #​295), so you can run bots with following DEBUG env:
DEBUG=bottender:*
DEBUG=bottender:request
DEBUG=bottender:session:read
DEBUG=bottender:session:write
  • [new] skip and show warning when calling send API in Messenger echo delivery read event (#​306)
  • [fix] deepClone when read from MemoryCacheStore (#​235)
  • [deps] Upgrade to Babel 7
messenger
  • [breaking] remove deprecated MessengerContext method - sendQuickReplies
  • [new] support Messenger platform v2.4.
  • [new] enable verifying graph API calls with appsecret_proof by default.
  • [new] context.getThreadOwner
const threadOwner = await context.getThreadOwner();
// {
//   app_id: '12345678910'
// }
  • [new] add pageId, gamePlay, brandedCamera, isRequestThreadControlFromPageInbox getters to MessengerEvent
context.event.pageId; // "<PAGE_ID>"

context.event.isRequestThreadControlFromPageInbox; // true

context.event.isGamePlay; //
context.event.gamePlay; //

context.event.isBrandedCamera; //
context.event.brandedCamera; //
  • [new] implement Batch Mode to send multiple requests in one batch (up to 50 messages):
const { isError613 } = require('messenger-batch');

new MessengerBot({
  // ...
  batchConfig: {
    delay: 1000,
    shouldRetry: isError613, // (#&#8203;613) Calls to this api have exceeded the rate limit.
    retryTimes: 2,
  },
});

It will enable message batching functionality via messaging-api-messenger under the hood.

  • [deprecated] sendAirlineFlightUpdateTemplate has been renamed to sendAirlineUpdateTemplate.
line
  • [new] support LINE Flex Message with replyFlex, pushFlex, sendFlex:
context.sendFlex('this is a flex', {
  type: 'bubble',
  header: {
    type: 'box',
    layout: 'vertical',
    contents: [
      {
        type: 'text',
        text: 'Header text',
      },
    ],
  },
  hero: {
    type: 'image',
    url: 'https://example.com/flex/images/image.jpg',
  },
  body: {
    type: 'box',
    layout: 'vertical',
    contents: [
      {
        type: 'text',
        text: 'Body text',
      },
    ],
  },
  footer: {
    type: 'box',
    layout: 'vertical',
    contents: [
      {
        type: 'text',
        text: 'Footer text',
      },
    ],
  },
  styles: {
    comment: 'See the example of a bubble style object',
  },
});
  • [new] add issueLinkToken to LineContext (#​245):
const result = await context.issueLinkToken();
// {
//   linkToken: 'NMZTNuVrPTqlr2IF8Bnymkb7rXfYv5EY',
// }
  • [new] add LINE linkAccount events support (#​243):
context.event.isAccountLink; // true
context.event.linkAccount;
// {
//   result: 'ok',
//   nonce: 'xxxxxxxxxxxxxxx',
// }
  • [new] add shouldBatch option:
new LineBot({
  // ...
  shouldBatch: true, // Default: false
});

When batching is enabled,

context.replyText('Hi');
context.replyText('Hi');
context.replyText('Hi');
context.replyText('Hi');
context.replyText('Hi');

Those 5 messages will be sent in one API call, just like the below one.

const { Line } = require('messaging-api-line');

context.reply([
  Line.createText('Hi'),
  Line.createText('Hi'),
  Line.createText('Hi'),
  Line.createText('Hi'),
  Line.createText('Hi'),
]);
  • [new] add sendMethod option:
new LineBot({
  // ...
  sendMethod: 'reply', // Default: 'push'
});
telegram
  • [breaking] Now context methods throw error when ok is false in Telegram:
{
  ok: false,
  result: { /* ... */ }
}
custom connector
  • [new] pass merged query and body to handler:
{
  ...query,
  ...body,
}

It's useful in custom connectors.

  • [new] export Context from entry (#​250)
const { Context } = require('bottender');

class MyContext extends Context {
  //...
}

Configuration

📅 Schedule: At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box.

This PR has been generated by WhiteSource Renovate. View repository job log here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant