Socket
Socket
Sign inDemoInstall

notifications-node-client

Package Overview
Dependencies
72
Maintainers
4
Versions
42
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    notifications-node-client

GOV.UK Notify Node.js client


Version published
Weekly downloads
5.5M
decreased by-0.35%
Maintainers
4
Created
Weekly downloads
 

Changelog

Source

[4.4.0] - 2018-09-05

Changed

  • Added instructions for uploading a document to be linked to from an email notification.
    • Created a helper function prepareUpload as a part of this development. This function encodes the document that is to be uploaded with base64 and returns a dictionary with prepared document as a value (the way our API is prepared to receive it). It also checks if the provided file is not larger than 2MB. The function throws an error if the file is too big.

Readme

Source

GOV.UK Notify Node.js client

This documentation is for developers interested in using this Node.js client to integrate their government service with GOV.UK Notify.

Table of Contents

Installation

npm install --save notifications-node-client

Getting started

var NotifyClient = require('notifications-node-client').NotifyClient,
	notifyClient = new NotifyClient(apiKey);

Generate an API key by logging in to GOV.UK Notify and going to the API integration page.

Connect through a proxy (optional)

notifyClient.setProxy(proxyUrl);

Send messages

Text message

Method
Click here to expand for more information.
notifyClient
	.sendSms(templateId, phoneNumber, {
			personalisation: personalisation,
			reference: reference,
			smsSenderId: smsSenderId})
	.then(response => console.log(response))
	.catch(err => console.error(err))
;
Response

If the request is successful, response will be an object.

Click here to expand for more information.
{
    "id": "bfb50d92-100d-4b8b-b559-14fa3b091cda",
    "reference": null,
    "content": {
        "body": "Some words",
        "from_number": "40604"
    },
    "uri": "https://api.notifications.service.gov.uk/v2/notifications/ceb50d92-100d-4b8b-b559-14fa3b091cd",
    "template": {
        "id": "ceb50d92-100d-4b8b-b559-14fa3b091cda",
       "version": 1,
       "uri": "https://api.notifications.service.gov.uk/v2/templates/bfb50d92-100d-4b8b-b559-14fa3b091cda"
    }
}

Otherwise the client will return an error err:

err.error.status_codeerr.error.errors
429[{
"error": "RateLimitError",
"message": "Exceeded rate limit for key type TEAM of 10 requests per 10 seconds"
}]
429[{
"error": "TooManyRequestsError",
"message": "Exceeded send limits (50) for today"
}]
400[{
"error": "BadRequestError",
"message": "Can"t send to this recipient using a team-only API key"
]}
400[{
"error": "BadRequestError",
"message": "Can"t send to this recipient when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode"
}]
Arguments
Click here to expand for more information.
phoneNumber

The phone number of the recipient, only required for sms notifications.

templateId

Find by clicking API info for the template you want to send.

options
reference

An optional identifier you generate. The reference can be used as a unique reference for the notification. Because Notify does not require this reference to be unique you could also use this reference to identify a batch or group of notifications.

You can omit this argument if you do not require a reference for the notification.

personalisation

If a template has placeholders, you need to provide their values, for example:

personalisation={
    'first_name': 'Amala',
    'reference_number': '300241',
}

This does not need to be provided if your template does not contain placeholders.

smsSenderId

Optional. Specifies the identifier of the sms sender to set for the notification. The identifiers are found in your service Settings, when you 'Manage' your 'Text message sender'.

If you omit this argument your default sms sender will be set for the notification.

Example usage with optional reference -

Email

Method
Click here to expand for more information.
notifyClient
	.sendEmail(templateId, emailAddress, {
			personalisation: personalisation,
			reference: reference,
			emailReplyToId: emailReplyToId})
    .then(response => console.log(response))
    .catch(err => console.error(err))
;
Response

If the request is successful, response will be an object.

Click here to expand for more information.
{
    "id": "bfb50d92-100d-4b8b-b559-14fa3b091cda",
    "reference": null,
    "content": {
        "subject": "Licence renewal",
        "body": "Dear Bill, your licence is due for renewal on 3 January 2016.",
        "from_email": "the_service@gov.uk"
    },
    "uri": "https://api.notifications.service.gov.uk/v2/notifications/ceb50d92-100d-4b8b-b559-14fa3b091cd",
    "template": {
        "id": "ceb50d92-100d-4b8b-b559-14fa3b091cda",
        "version": 1,
        "uri": "https://api.notificaitons.service.gov.uk/service/your_service_id/templates/bfb50d92-100d-4b8b-b559-14fa3b091cda"
    }
}

Otherwise the client will return an error error object:

status_codeerrors
429[{
"error": "RateLimitError",
"message": "Exceeded rate limit for key type TEAM of 10 requests per 10 seconds"
}]
429[{
"error": "TooManyRequestsError",
"message": "Exceeded send limits (50) for today"
}]
400[{
"error": "BadRequestError",
"message": "Can"t send to this recipient using a team-only API key"
]}
400[{
"error": "BadRequestError",
"message": "Can"t send to this recipient when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode"
}]
Arguments
Click here to expand for more information.
emailAddress

The email address of the recipient, only required for email notifications.

templateId

Find by clicking API info for the template you want to send.

options
reference

An optional identifier you generate. The reference can be used as a unique reference for the notification. Because Notify does not require this reference to be unique you could also use this reference to identify a batch or group of notifications.

You can omit this argument if you do not require a reference for the notification.

emailReplyToId

Optional. Specifies the identifier of the email reply-to address to set for the notification. The identifiers are found in your service Settings, when you 'Manage' your 'Email reply to addresses'.

If you omit this argument your default email reply-to address will be set for the notification.

personalisation

If a template has placeholders, you need to provide their values, for example:

personalisation={
    'first_name': 'Amala',
    'application_number': '300241',
}
emailReplyToId

Optional. Specifies the identifier of the email reply-to address to set for the notification. The identifiers are found in your service Settings, when you 'Manage' your 'Email reply to addresses'. If you omit this argument your default email reply-to address will be set for the notification.

Send a document by email

Send files without the need for email attachments.

To send a document by email, add a placeholder field to the template then upload a file. The placeholder field will contain a secure link to download the document.

Contact the GOV.UK Notify team to enable this function for your service.

Add a placeholder field to the template

In Notify, use double brackets to add a placeholder field to the email template. For example:

"Download your document at: ((link_to_document))"

Upload your document

˜ The document you upload must be a PDF file smaller than 2MB.

Pass the file object as a value into the personalisation argument. For example:

var fs = require('fs');

fs.readFile('path/to/document.pdf', function(err, document) {
	console.log(err);
	notifyClient.sendEmail(templateId, emailAddress, {
    personalisation: {
        first_name: 'Amala',
        application_date: '2018-01-01',
        link_to_document: notifyClient.prepareUpload(document)
    }
	}).then(response => console.log(response.body)).catch(err => console.error(err))
});
Response

If the request to the client is successful, the client returns a response object, with a following body attribute:

{
  "id": "740e5834-3a29-46b4-9a6f-16142fde533a",
  "reference": "STRING",
  "content": {
    "subject": "SUBJECT TEXT",
    "body": "MESSAGE TEXT",
    "from_email": "SENDER EMAIL"
  },
  "uri": "https://api.notifications.service.gov.uk/v2/notifications/740e5834-3a29-46b4-9a6f-16142fde533a",
  "template": {
    "id": "f33517ff-2a88-4f6e-b855-c550268ce08a",
    "version": INTEGER,
    "uri": "https://api.notifications.service.gov.uk/v2/template/f33517ff-2a88-4f6e-b855-c550268ce08a"
  }
}
Error codes

If the request is not successful, the client returns an error error object:

error.status_codeerror.messageHow to fix
400[{
"error": "BadRequestError",
"message": "Can't send to this recipient using a team-only API key"
]}
Use the correct type of API key
400[{
"error": "BadRequestError",
"message": "Can't send to this recipient when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode"
}]
Your service cannot send this notification in trial mode
400[{
"error": "BadRequestError",
"message": "Unsupported document type '{}'. Supported types are: {}"
}]
The document you upload must be a PDF file
400[{
"error": "BadRequestError",
"message": "Document didn't pass the virus scan"
}]
The document you upload must be virus free
403[{
"error": "AuthError",
"message": "Error: Your system clock must be accurate to within 30 seconds"
}]
Check your system clock
403[{
"error": "AuthError",
"message": "Invalid token: signature, api token not found"
}]
Use the correct type of API key
429[{
"error": "RateLimitError",
"message": "Exceeded rate limit for key type TEAM/TEST/LIVE of 3000 requests per 60 seconds"
}]
Refer to API rate limits for more information
429[{
"error": "TooManyRequestsError",
"message": "Exceeded send limits (LIMIT NUMBER) for today"
}]
Refer to service limits for the limit number
500[{
"error": "Exception",
"message": "Internal server error"
}]
Notify was unable to process the request, resend your notification.
N/A[{
"error": "Exception",
"message": "Document is larger than 2MB."
}]
The file you tried to upload was above the 2MB limit. Send a file that weighs less than 2MB.

Letter

Method
Click here to expand for more information.
notifyClient
    .sendLetter(templateId, {
				personalisation: personalisation,
				reference: reference})
    .then(response => console.log(response))
    .catch(err => console.error object)
;

where personalisation is

personalisation={
    address_line_1: 'The Occupier',  // required
    address_line_2: '123 High Street', // required
    address_line_3: 'London',
    postcode: 'SW14 6BH',  // required

    // ... any other optional address lines, or personalisation fields found in your template
},
Response

If the request is successful, response will be an object:

Click here to expand for more information.
{
  "id": "740e5834-3a29-46b4-9a6f-16142fde533a",
  "reference": null,
  "content": {
    "subject": "Licence renewal",
    "body": "Dear Bill, your licence is due for renewal on 3 January 2016.",
  },
  "uri": "https://api.notifications.service.gov.uk/v2/notifications/740e5834-3a29-46b4-9a6f-16142fde533a",
  "template": {
    "id": "f33517ff-2a88-4f6e-b855-c550268ce08a",
    "version": 1,
    "uri": "https://api.notifications.service.gov.uk/v2/template/f33517ff-2a88-4f6e-b855-c550268ce08a"
  }
  "scheduled_for": null
}

Otherwise the client will raise a HTTPError:

status_codeerrors
429[{
"error": "RateLimitError",
"message": "Exceeded rate limit for key type live of 10 requests per 20 seconds"
}]
429[{
"error": "TooManyRequestsError",
"message": "Exceeded send limits (50) for today"
}]
400[{
"error": "BadRequestError",
"message": "Cannot send letters with a team api key"
]}
400[{
"error": "BadRequestError",
"message": "Cannot send letters when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode"
}]
400[{
"error": "ValidationError",
"message": "personalisation address_line_1 is a required property"
}]
Arguments
Click here to expand for more information.
template_id

Find by clicking API info for the template you want to send.

reference

An optional identifier you generate. The reference can be used as a unique reference for the notification. Because Notify does not require this reference to be unique you could also use this reference to identify a batch or group of notifications.

You can omit this argument if you do not require a reference for the notification.

personalisation

The letter must contain:

  • mandatory address fields
  • optional address fields if applicable
  • fields from template
personalisation={
  address_line_1: 'The Occupier',  // mandatory address field
  address_line_2: 'Flat 2',  // mandatory address field
  address_line_3: '123 High Street',  // optional address field
  address_line_4: 'Richmond upon Thames',  // optional address field
  address_line_5: 'London',  // optional address field
  address_line_6: 'Middlesex',  // optional address field
  postcode: 'SW14 6BH',  // mandatory address field
  application_id: '1234',  // field from template
  application_date: '2017-01-01',  // field from template
}

Get the status of one message

Method
Click here to expand for more information.
notifyClient
	.getNotificationById(notificationId)
	.then((response) => { })
	.catch((err) => {})
;
Response
Click here to expand for more information.

If the request is successful, response will be an object:

{
    "id": "notify_id",
    "body": "Hello Foo",
    "subject": "null|email_subject",
    "reference": "client reference",
    "email_address": "email address",
    "phone_number": "phone number",
    "line_1": "full name of a person or company",
    "line_2": "123 The Street",
    "line_3": "Some Area",
    "line_4": "Some Town",
    "line_5": "Some county",
    "line_6": "Something else",
    "postcode": "postcode",
    "type": "sms|letter|email",
    "status": "current status",
    "template": {
        "version": 1,
        "id": 1,
        "uri": "/template/{id}/{version}"
     },
    "created_by_name": "name of the person who sent the notification if sent manually",
    "created_at": "created at",
    "sent_at": "sent to provider at",
}

Otherwise the client will return an error error object:

status_codeerrors
404[{
"error": "NoResultFound",
"message": "No result found"
}]
400[{
"error": "ValidationError",
"message": "id is not a valid UUID"
}]
Arguments
Click here to expand for more information.
notificationId

The ID of the notification.

Get the status of all messages

Method
Click here to expand for more information.
notifyClient
	.getNotifications(templateType, status, reference, olderThan)
	.then((response) => { })
	.catch((err) => {})
;
Response

If the request is successful, response will be an object.

Click here to expand for more information.
{ "notifications":
    [{
        "id": "notify_id",
        "reference": "client reference",
        "email_address": "email address",
        "phone_number": "phone number",
        "line_1": "full name of a person or company",
        "line_2": "123 The Street",
        "line_3": "Some Area",
        "line_4": "Some Town",
        "line_5": "Some county",
        "line_6": "Something else",
        "postcode": "postcode",
        "type": "sms | letter | email",
        "status": sending | delivered | permanent-failure | temporary-failure | technical-failure
        "template": {
            "version": 1,
          "id": 1,
          "uri": "/template/{id}/{version}"
       },
       "created_by_name": "name of the person who sent the notification if sent manually",
       "created_at": "created at",
       "sent_at": "sent to provider at",
    },
    …
  ],
  "links": {
     "current": "/notifications?template_type=sms&status=delivered",
     "next": "/notifications?other_than=last_id_in_list&template_type=sms&status=delivered"
  }
}
status_codeerrors
400[{
"error": "ValidationError",
"message": "bad status is not one of [created, sending, delivered, pending, failed, technical-failure, temporary-failure, permanent-failure]"
}]
400[{
"error": "Apple is not one of [sms, email, letter]"
}]
Arguments
Click here to expand for more information.
templateType

If omitted all messages are returned. Otherwise you can filter by:

  • email
  • sms
  • letter
status

email

You can filter by:

  • sending - the message is queued to be sent by the provider.
  • delivered - the message was successfully delivered.
  • failed - this will return all failure statuses permanent-failure, temporary-failure and technical-failure.
  • permanent-failure - the provider was unable to deliver message, email does not exist; remove this recipient from your list.
  • temporary-failure - the provider was unable to deliver message, email box was full; you can try to send the message again.
  • technical-failure - Notify had a technical failure; you can try to send the message again.

You can omit this argument to ignore this filter.

text message

You can filter by:

  • sending - the message is queued to be sent by the provider.
  • delivered - the message was successfully delivered.
  • failed - this will return all failure statuses permanent-failure, temporary-failure and technical-failure.
  • permanent-failure - the provider was unable to deliver message, phone number does not exist; remove this recipient from your list.
  • temporary-failure - the provider was unable to deliver message, the phone was turned off; you can try to send the message again.
  • technical-failure - Notify had a technical failure; you can try to send the message again.

You can omit this argument to ignore this filter.

letter

You can filter by:

  • accepted - Notify is in the process of printing and posting the letter
  • technical-failure - Notify had an unexpected error while sending to our printing provider

You can omit this argument to ignore this filter.

reference

This is the reference you gave at the time of sending the notification. This can be omitted to ignore the filter.

olderThan

If omitted all messages are returned. Otherwise you can filter to retrieve all notifications older than the given notification id.

Get a template by ID

Method
Click here to expand for more information.
notifyClient
    .getTemplateById(templateId)
    .then((response) => { })
    .catch((err) => {})
;
Response

If the request is successful, response will be an object.

Click here to expand for more information.
{
    "id": "template_id",
    "name": "template name",
    "type": "sms|email|letter",
    "created_at": "created at",
    "updated_at": "updated at",
    "version": "version",
    "created_by": "someone@example.com",
    "body": "body",
    "subject": "null|email_subject"
}

Otherwise the client will return an error error object:

status_codeerrors
404[{
"error": "NoResultFound",
"message": "No result found"
}]
Arguments
Click here to expand for more information.
templateId

Find by clicking API info for the template you want to send.

Get a template by ID and version

Method
Click here to expand for more information.
notifyClient
    .getTemplateByIdAndVersion(templateId, version)
    .then((response) => { })
    .catch((err) => {})
;
Response

If the request is successful, response will be an object.

Click here to expand for more information.
{
    "id": "template_id",
    "name": "template name",
    "type": "sms|email|letter",
    "created_at": "created at",
    "updated_at": "updated at",
    "version": "version",
    "created_by": "someone@example.com",
    "body": "body",
    "subject": "null|email_subject"
}

Otherwise the client will return an error error object:

status_codeerrors
404[{
"error": "NoResultFound",
"No result found"
}]
Arguments
Click here to expand for more information.
templateId

Find by clicking API info for the template you want to send.

version

The version number of the template

Get all templates

Method
Click here to expand for more information.
notifyClient
    .getAllTemplates(templateType)
    .then((response) => { })
    .catch((err) => {})
;

This will return the latest version for each template.

Response

If the request is successful, response will be an object.

Click here to expand for more information.
{
    "templates" : [
        {
            "id": "template_id",
            "name": "template name",
            "type": "sms|email|letter",
            "created_at": "created at",
            "updated_at": "updated at",
            "version": "version",
            "created_by": "someone@example.com",
            "body": "body",
            "subject": "null|email_subject"
        },
        {
            ... another template
        }
    ]
}

If no templates exist for a template type or there no templates for a service, the response will be an object with an empty templates list element:

{
    "templates" : []
}
Arguments
Click here to expand for more information.
templateType

If omitted all messages are returned. Otherwise you can filter by:

  • email
  • sms
  • letter

Generate a preview template

Method
Click here to expand for more information.
personalisation = { "foo": "bar" };
notifyClient
    .previewTemplateById(templateId, personalisation)
    .then((response) => { })
    .catch((err) => {})
;
Response
Click here to expand for more information.

If the request is successful, response will be an object:

{
    "id": "notify_id",
    "type": "sms|email|letter",
    "version": "version",
    "body": "Hello bar" // with substitution values,
    "subject": "null|email_subject"
}

Otherwise the client will return an error error object:

status_codeerrors
400[{
"error": "BadRequestError",
"Missing personalisation: [name]"
}]
404[{
"error": "NoResultFound",
"No result found"
}]
Arguments
Click here to expand for more information.
templateId

Find by clicking API info for the template you want to send.

personalisation

If a template has placeholders you need to provide their values. For example:

personalisation={
    'first_name': 'Amala',
    'reference_number': '300241',
}

Otherwise the parameter can be omitted or undefined can be passed in its place.

Get received text messages with pagination

This will return one page of text messages (250) per call.

Method
Click here to expand for more information.
notifyClient
    .getReceivedTexts(olderThan)
    .then((response) => { })
    .catch((err) => {})
;
Response
Click here to expand for more information.

If the request is successful, response will be a json object:

{
  "received_text_messages":
    [
      {
        "id": "notify_id", // required
        "user_number": "user number", // required user number
        "notify_number": "notify number", // receiving number
        "created_at": "created at", // required
        "service_id": "service id", // required service id
        "content": "text content" // required text content
      },
      …
    ],
  "links": {
    "current": "/received-test-messages",
    "next": "/received-text-messages?older_than=last_id_in_list"
  }
}
Arguments
Click here to expand for more information.
olderThan

If omitted, returns 250 of the latest received text messages. Otherwise the next 250 received text messages older than the given id are returned.

Tests

There are unit and integration tests that can be run to test functionality of the client. You will need to have the relevant environment variables sourced to run the tests.

To run the unit tests:

npm test

To run the integration tests:

npm test --integration

FAQs

Last updated on 12 Sep 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc