Merge branch 'master' into record-user-that-requested-to-go-live

This commit is contained in:
Chris Hill-Scott
2019-04-23 15:38:44 +01:00
committed by GitHub
51 changed files with 733 additions and 550 deletions

View File

@@ -2,7 +2,7 @@
"use strict";
var queues = {};
var dd = new diffDOM.DiffDOM();
var dd = new diffDOM();
var getRenderer = $component => response => dd.apply(
$component.get(0),
@@ -34,7 +34,7 @@
);
setTimeout(
() => poll(...arguments), interval
() => poll.apply(window, arguments), interval
);
};

View File

@@ -108,6 +108,10 @@
a:active {
text-decoration: underline;
}
ol ol & {
padding-left: $gutter;
}
}
&__item--active {

View File

@@ -52,3 +52,5 @@
- caa.co.uk
- onevoicewales.wales
- cefas.co.uk
- mtvh.co.uk
- officeforstudents.org.uk

View File

@@ -65,11 +65,6 @@ def privacy():
return render_template('views/privacy.html')
@main.route('/trial-mode')
def trial_mode():
return redirect(url_for('.using_notify') + '#trial-mode', 301)
@main.route('/pricing')
def pricing():
return render_template(
@@ -85,7 +80,7 @@ def pricing():
@main.route('/delivery-and-failure')
def delivery_and_failure():
return redirect(url_for('.using_notify') + '#messagedeliveryandfailure', 301)
return redirect(url_for('.message_status'), 301)
@main.route('/design-patterns-content-guidance')
@@ -240,6 +235,30 @@ def roadmap():
)
@main.route('/features/email')
def features_email():
return render_template(
'views/features/emails.html',
navigation_links=features_nav()
)
@main.route('/features/sms')
def features_sms():
return render_template(
'views/features/text-messages.html',
navigation_links=features_nav()
)
@main.route('/features/letters')
def features_letters():
return render_template(
'views/features/letters.html',
navigation_links=features_nav()
)
@main.route('/features/security', endpoint='security')
def security():
return render_template(
@@ -261,6 +280,27 @@ def using_notify():
return render_template(
'views/using-notify.html',
navigation_links=features_nav()
), 410
@main.route('/features/messages-status')
def message_status():
return render_template(
'views/message-status.html',
navigation_links=features_nav()
)
@main.route('/trial-mode')
def trial_mode():
return redirect(url_for('.trial_mode_new'), 301)
@main.route('/features/trial-mode')
def trial_mode_new():
return render_template(
'views/trial-mode.html',
navigation_links=features_nav()
)

View File

@@ -92,7 +92,7 @@ def view_job(service_id, job_id):
version=job['template_version']
)['data']
just_sent_message = 'Your {} been sent. Printing starts {} at 5.30pm.'.format(
just_sent_message = 'Your {} been sent. Printing starts {} at 5:30pm.'.format(
'letter has' if job['notification_count'] == 1 else 'letters have',
printing_today_or_tomorrow()
)

View File

@@ -153,7 +153,7 @@ def get_letter_printing_statement(status, created_at):
created_at_dt = parser.parse(created_at).replace(tzinfo=None)
if letter_can_be_cancelled(status, created_at_dt):
return 'Printing starts {} at 5.30pm'.format(printing_today_or_tomorrow())
return 'Printing starts {} at 5:30pm'.format(printing_today_or_tomorrow())
else:
printed_datetime = utc_string_to_aware_gmt_datetime(created_at) + timedelta(hours=6, minutes=30)
printed_date = _format_datetime_short(printed_datetime)

View File

@@ -3,11 +3,33 @@ def features_nav():
{
"name": "Features",
"link": "main.features",
"sub_navigation_items": [
{
"name": "Emails",
"link": "main.features_email",
},
{
"name": "Text messages",
"link": "main.features_sms",
},
{
"name": "Letters",
"link": "main.features_letters",
},
]
},
{
"name": "Roadmap",
"link": "main.roadmap",
},
{
"name": "Trial mode",
"link": "main.trial_mode_new",
},
{
"name": "Message status",
"link": "main.message_status",
},
{
"name": "Security",
"link": "main.security",
@@ -16,8 +38,4 @@ def features_nav():
"name": "Terms of use",
"link": "main.terms",
},
{
"name": "Using Notify",
"link": "main.using_notify",
},
]

View File

@@ -88,36 +88,6 @@ class Organisation(JSONModel):
'agreement.'.format(self.name)
)
def as_pricing_paragraph(self, **kwargs):
return Markup(self._as_pricing_paragraph(**kwargs))
def _as_pricing_paragraph(self, pricing_link, download_link, support_link, signed_in):
if not signed_in:
return ((
'<a href="{}">Sign in</a> to download a copy or find '
'out if one is already in place with your organisation.'
).format(pricing_link))
if self.agreement_signed is None:
return ((
'<a href="{}">Download the agreement</a> or '
'<a href="{}">contact us</a> to find out if we already '
'have one in place with your organisation.'
).format(download_link, support_link))
return (
'<a href="{}">Download the agreement</a> '
'({} {}).'.format(
download_link,
self.name,
{
True: 'has already accepted it',
False: 'hasnt accepted it yet'
}.get(self.agreement_signed)
)
)
@property
def _acceptance_required(self):
return (

View File

@@ -114,8 +114,12 @@ class Service(JSONModel):
@cached_property
def has_team_members(self):
return user_api_client.get_count_of_users_with_permission(
self.id, 'manage_service'
return (
user_api_client.get_count_of_users_with_permission(
self.id, 'manage_service'
) + invite_api_client.get_count_of_invites_with_permission(
self.id, 'manage_service'
)
) > 1
def cancel_invite(self, invited_user_id):

View File

@@ -49,6 +49,10 @@ class HeaderNavigation(Navigation):
},
'features': {
'features',
'features_email',
'features_letters',
'features_sms',
'message_status',
'roadmap',
'security',
'terms',
@@ -279,6 +283,7 @@ class HeaderNavigation(Navigation):
'template_history',
'template_usage',
'trial_mode',
'trial_mode_new',
'usage',
'view_job',
'view_job_csv',
@@ -451,6 +456,9 @@ class MainNavigation(Navigation):
'email_template',
'error',
'features',
'features_email',
'features_letters',
'features_sms',
'feedback',
'find_users_by_email',
'forgot_password',
@@ -469,6 +477,7 @@ class MainNavigation(Navigation):
'letter_branding_preview_image',
'live_services',
'letter_template',
'message_status',
'manage_org_users',
'new_password',
'old_integration_testing',
@@ -525,6 +534,7 @@ class MainNavigation(Navigation):
'thanks',
'triage',
'trial_mode',
'trial_mode_new',
'trial_services',
'two_factor',
'two_factor_email',
@@ -654,6 +664,9 @@ class CaseworkNavigation(Navigation):
'error',
'estimate_usage',
'features',
'features_email',
'features_letters',
'features_sms',
'feedback',
'find_users_by_email',
'forgot_password',
@@ -678,6 +691,7 @@ class CaseworkNavigation(Navigation):
'manage_org_users',
'manage_template_folder',
'manage_users',
'message_status',
'monthly',
'new_password',
'old_integration_testing',
@@ -776,6 +790,7 @@ class CaseworkNavigation(Navigation):
'thanks',
'triage',
'trial_mode',
'trial_mode_new',
'trial_services',
'two_factor',
'two_factor_email',
@@ -908,6 +923,9 @@ class OrgNavigation(Navigation):
'error',
'estimate_usage',
'features',
'features_email',
'features_letters',
'features_sms',
'feedback',
'find_users_by_email',
'forgot_password',
@@ -930,6 +948,7 @@ class OrgNavigation(Navigation):
'live_services',
'manage_template_folder',
'manage_users',
'message_status',
'monthly',
'new_password',
'old_integration_testing',
@@ -1027,6 +1046,7 @@ class OrgNavigation(Navigation):
'thanks',
'triage',
'trial_mode',
'trial_mode_new',
'trial_services',
'two_factor',
'two_factor_email',

View File

@@ -1,5 +1,6 @@
from app.models.user import (
InvitedUser,
roles,
translate_permissions_from_admin_roles_to_db,
)
from app.notify_client import NotifyAdminAPIClient, _attach_current_user, cache
@@ -44,6 +45,14 @@ class InviteApiClient(NotifyAdminAPIClient):
'/service/{}/invite'.format(service_id)
)['data']
def get_count_of_invites_with_permission(self, service_id, permission):
if permission not in roles.keys():
raise TypeError('{} is not a valid permission'.format(permission))
return len([
invited_user for invited_user in self.get_invites_for_service(service_id)
if invited_user.has_permission_for_service(service_id, permission)
])
def check_token(self, token):
resp = self.get(url='/invite/service/{}'.format(token))
return InvitedUser(**resp['data'])

View File

@@ -86,9 +86,10 @@
<ul>
<li><a href="{{ url_for("main.features") }}">Features</a></li>
<li><a href="{{ url_for("main.roadmap") }}">Roadmap</a></li>
<li><a href="{{ url_for("main.trial_mode_new") }}">Trial mode</a></li>
<li><a href="{{ url_for("main.message_status") }}">Message status</a></li>
<li><a href="{{ url_for("main.security") }}">Security</a></li>
<li><a href="{{ url_for("main.terms") }}">Terms of use</a></li>
<li><a href="{{ url_for("main.using_notify") }}">Using Notify</a></li>
</ul>
</div>
<div class="column-one-quarter">

View File

@@ -1,18 +1,29 @@
{% macro sub_navigation_item(item) %}
<li class="sub-navigation__item {% if item['link'] == request.endpoint %} sub-navigation__item--active {% endif %}"
itemprop="itemListElement"
itemscope
itemtype="http://schema.org/ListItem"
>
<a href="{{ url_for(item['link']) }}" itemprop="item">
<span itemprop="name">{{item['name']}}</span>
</a>
</li>
{% endmacro %}
{% macro sub_navigation(
item_set
) %}
<nav class="sub-navigation">
<ol itemscope itemtype="http://schema.org/ItemList">
{% for item in item_set %}
<li class="sub-navigation__item {% if item['link'] == request.endpoint %} sub-navigation__item--active {% endif %}"
itemprop="itemListElement"
itemscope
itemtype="http://schema.org/ListItem"
>
<a href="{{ url_for(item['link']) }}" itemprop="item">
<span itemprop="name">{{item['name']}}</span>
</a>
</li>
{{ sub_navigation_item(item) }}
{% if item.sub_navigation_items %}
<ol itemscope itemtype="http://schema.org/ItemList">
{% for sub_item in item.sub_navigation_items %}
{{ sub_navigation_item(sub_item) }}
{% endfor %}
</ol>
{% endif %}
{% endfor %}
</ol>
</nav>

View File

@@ -9,8 +9,10 @@
<div class="grid-row">
<div class="column-two-thirds">
<h1 class="heading-large"> Documentation </h1>
<p>Integrate with the GOV.UK Notify API using one of our clients (links open in a new tab):</p>
<h1 class="heading-large">Documentation</h1>
<p>Use the GOV.UK Notify API to send messages automatically.</p>
<h2 class="heading-medium">Clients</h2>
<p>Choose a client to integrate our API with your web application or back-office system. Links to documentation open in a new tab.</p>
<ul class="list list-bullet">
{% for key, label in [
('java', 'Java'),

View File

@@ -15,64 +15,72 @@
<div class="column-two-thirds">
<h1 class="heading-large">Features</h1>
<p>With GOV.UK Notify, you can:</p>
<p>If you work for central government, a local authority or the NHS, you can use GOV.UK Notify to keep your users updated.</p>
<p>Notify makes it easy to create, customise and send:</p>
<ul class="list list-bullet">
<li>send emails</li>
<li>send and receive text messages (UK and internationally)</li>
<li>send letters</li>
<li><a href="{{ url_for('main.features_email') }}">emails</a></li>
<li><a href="{{ url_for('main.features_sms') }}">text messages</a></li>
<li><a href="{{ url_for('main.features_letters') }}">letters</a></li>
</ul>
<p>You dont need any technical knowledge to use Notify.</p>
<p><a href="{{ url_for('main.register') }}">Create an account</a> for free and try it yourself.</p>
<p>You do not need any technical knowledge to use Notify.</p>
{% if not current_user.is_authenticated %}
<p><a href="{{ url_for('main.register') }}">Create an account</a> for free and try it yourself.</p>
{% endif %}
<h2 class="heading-medium">Create messages quickly and easily</h2>
<p>Without any technical knowledge, you can:</p>
<h2 class="heading-medium">Reusable message templates</h2>
<p>To send an email, text or letter with Notify, you need to create a reusable message template first.</p>
<p>Templates let you send the same thing to lots of people, as often as you need to, without writing a new message each time.</p>
<h2 class="heading-medium">Personalised content</h2>
<p>Notify makes it easy to send personalised messages from a single template.</p>
<p>If you want to include personalised content in your message, you can add a placeholder. Placeholders are filled in with details, like a name or reference number, each time you send a message. You can do this manually or upload a list of personal details and let Notify do it for you.</p>
<h2 class="heading-medium">Bulk sending</h2>
<p>To send a batch of messages at once, upload a list of contact details to Notify. If you're sending emails and text messages, you can also schedule the date and time you want them to be sent.</p>
<h2 class="heading-medium">API integration</h2>
<p>You can integrate the Notify API with your web application or back-office system to send messages automatically.</p>
<p>Read our <a href="{{ url_for('.documentation') }}">API documentation</a> for more information.</p>
<h2 class="heading-medium">Reporting</h2>
<p>Notifys real-time dashboard lets you see the number of messages sent. You can also check the current status of any message to see when it was delivered.</p>
<p>Read more about how <a href="{{ url_for('main.message_status') }}">message status</a> works.</p>
<h2 class="heading-medium">Permissions</h2>
<p>Control which members of your team can see, create, edit and send messages.</p>
<p>Notify lets you:</p>
<ul class="list list-bullet">
<li>create your own message templates</li>
<li>change how messages are formatted</li>
<li>preview messages before you send them</li>
<li>set different permission levels for each team member</li>
<li>invite team members who dont have a government email address</li>
<li>choose who else can manage team members</li>
</ul>
<h2 class="heading-medium">Customise your branding</h2>
<p>You control how your messages look when you send them through Notify. You can:</p>
<ul class="list list-bullet">
<li>use your organisations own branding</li>
<li>choose the name that emails and text messages come from</li>
<li>choose the email address that users reply to</li>
<li>get a unique phone number for text message replies</li>
</ul>
<h2 class="heading-medium">Send messages in bulk or individually</h2>
<p>With Notify, you can:</p>
<ul class="list list-bullet">
<li>send bulk messages to lots of users</li>
<li>send personalised messages to individual users</li>
<li>schedule messages to be sent at a particular time</li>
<li>send messages automatically <a href="/documentation">through our API</a></li>
</ul>
<h2 class="heading-medium">Track your activity</h2>
<p>Through the Notify dashboard, you can:</p>
<ul class="list list-bullet">
<li>check the delivery status of any emails and text messages</li>
<li>see a real-time dashboard of your activity</li>
<li>view your usage and reports</li>
</ul>
<h2 class="heading-medium">Manage your team</h2>
<p>Through the Notify dashboard, you can:</p>
<ul class="list list-bullet">
<li>set permission levels for different team members</li>
<li>invite new users (including people without a government email address)</li>
</ul>
<h2 class="heading-medium">Send messages reliably</h2>
<h2 class="heading-medium">Performance</h2>
<p>Notify commits to:</p>
<ul class="list list-bullet">
<li>sending 95% of emails and text messages within 10 seconds</li>
<li>sending letters by 3pm the next working day (if you submit it through Notify before 5pm)</li>
<li>printing and posting letters by 3pm the next working day (if you send them to us before 5:30pm)</li>
</ul>
<p>Notify sends messages through multiple providers. If one provider fails, Notify automatically switches to another so that your messages arent affected.</p>
<p>You can <a href="https://www.gov.uk/performance/govuk-notify">check how Notify is performing</a>.</p>
<p>We send messages through several different providers. If one provider fails, Notify switches to another so that your messages are not affected.</p>
<p>Visit GOV.UK Performance to <a href="https://www.gov.uk/performance/govuk-notify">see how Notify is performing</a>.</p>
<h2 class="heading-medium">Security</h2>
<p>Notify protects and manages data to meet the needs of government services.</p>
<h3 class="heading-small">Hide sensitive information</h3>
<p>Notify lets you redact personal information from your messages after theyve been sent. This means that only the recipient can see that information.</p>
<h3 class="heading-small">Two-factor authentication</h3>
<p>Notify uses two-factor authentication (2FA) to keep your account secure. When you sign in, we'll send a unique one-time code to your phone and ask you to enter it before we let you use your account.</p>
<p>Read more about <a href="{{ url_for('main.security') }}">security</a>.
<h2 class="heading-medium">Support</h2>
<p>Notify provides 24-hour online support. If you have an emergency outside office hours, well reply within 30 minutes.</p>
<p>Find out more about <a href="{{ url_for('.support') }}">support</a>.</p>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,60 @@
{% extends "withoutnav_template.html" %}
{% from "components/table.html" import mapping_table, row, text_field, edit_field, field with context %}
{% from "components/sub-navigation.html" import sub_navigation %}
{% block per_page_title %}
Emails
{% endblock %}
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-one-third">
{{ sub_navigation(navigation_links) }}
</div>
<div class="column-two-thirds">
<h1 class="heading heading-large">Emails</h1>
<p>Send an unlimited number of emails for free with GOV.UK Notify.</p>
{% if not current_user.is_authenticated %}
<p><a href="{{ url_for('main.register') }}">Create an account</a> and try Notify for yourself.</p>
{% endif %}
<h2 class="heading heading-medium">Features</h2>
<p>Notify makes it easy to:</p>
<ul class="list list-bullet">
<li>create reusable email templates</li>
<li>personalise the content of your emails</li>
<li>send and schedule bulk messages</li>
</ul>
<p>You can also <a href="{{ url_for('.documentation') }}">integrate with our API</a> to send emails automatically.</p>
<h3 class="heading heading-small">Email branding</h3>
<p>Add your organisations logo and brand colour to email templates.</p>
<p>You can change your branding in your service settings.</p>
<h3 class="heading heading-small">Send files by email</h3>
<p>Notify offers a safe and reliable way to send files by email.</p>
<p>Upload a file using our API, then send your users an email with a link to download it.</p>
<p>Notify uses encrypted links instead of email attachments because:</p>
<ul class="list list-bullet">
<li>theyre more secure</li>
<!--<li>you can track when the recipient downloads your document</li>-->
<li>email attachments are often marked as spam</li>
</ul>
<p><a href="{{ url_for('.feedback', ticket_type='ask-question-give-feedback') }}">Contact the team</a> and ask us to turn this feature on for your service.</p>
<p>Read our <a href="{{ url_for('.documentation') }}">API documentation</a> for more information.</p>
<h3 class="heading heading-small">Add a reply-to address</h3>
<p>Notify lets you choose the email address that users reply to.</p>
<p>Emails with a reply-to address seem more trustworthy and are less likely to be labelled as spam.</p>
<p>You can add reply-to addresses in your service settings.</p>
<h2 class="heading heading-medium">Pricing</h2>
<p>Its free to send emails through Notify.</p>
<p><a href="{{ url_for('.pricing') }}">See pricing</a> for more details.</p>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,56 @@
{% extends "withoutnav_template.html" %}
{% from "components/table.html" import mapping_table, row, text_field, edit_field, field with context %}
{% from "components/sub-navigation.html" import sub_navigation %}
{% block per_page_title %}
Letters
{% endblock %}
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-one-third">
{{ sub_navigation(navigation_links) }}
</div>
<div class="column-two-thirds">
<h1 class="heading heading-large">Letters</h1>
<p>GOV.UK Notify will print, pack and post your letters for you.</p>
{% if not current_user.is_authenticated %}
<p><a href="{{ url_for('main.register') }}">Create an account</a> and try Notify for yourself.</p>
{% endif %}
<h2 class="heading heading-medium">Features</h2>
<p>Notify makes it easy to:</p>
<ul class="list list-bullet">
<li>create reusable letter templates</li>
<li>personalise the content of your letter</li>
<li>send bulk mail</li>
</ul>
<p>You can also <a href="{{ url_for('.documentation') }}">integrate with our API</a> to send letters automatically.</p>
<h3 class="heading-small">Choose your postage</h3>
<p>Notify can send letters by first or second class post.</p>
<p>First class letters are delivered one day after theyre dispatched. Second class letters are delivered 2 days after theyre dispatched.</p>
<p>Letters sent before 5:30pm are dispatched the next working day (Monday to Friday). Royal Mail delivers from Monday to Saturday, excluding bank holidays.</p>
<h3 class="heading heading-small">Upload your own letters</h3>
<p>You can create reusable letter templates in Notify, or upload and send your own letters with the Notify API.</p>
<p>Use the <a href="https://docs.notifications.service.gov.uk/documentation/images/notify-pdf-letter-spec-v2.3.pdf">letter specification document</a> to help you set up your letter, save it as a PDF, then upload it to Notify.<p>
<p>Read our <a href="{{ url_for('.documentation') }}">API documentation</a> for more information.</p>
<h2 class="heading heading-medium">Pricing</h2>
<p>It costs between 30p and 76p (plus VAT) to send a letter. Prices include:</p>
<ul class="list list-bullet">
<li>paper</li>
<li>double-sided colour printing</li>
<li>C5 size envelopes with an address window</li>
<li>first or second class postage</li>
</ul>
<p>Letters can be up to 10 pages long (5 double-sided sheets of paper).</p>
<p><a href="{{ url_for('.pricing') }}">See pricing</a> for more details.</p>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,52 @@
{% extends "withoutnav_template.html" %}
{% from "components/table.html" import mapping_table, row, text_field, edit_field, field with context %}
{% from "components/sub-navigation.html" import sub_navigation %}
{% block per_page_title %}
Text messages
{% endblock %}
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-one-third">
{{ sub_navigation(navigation_links) }}
</div>
<div class="column-two-thirds">
<h1 class="heading heading-large">Text messages</h1>
<p>Send thousands of free text messages to UK and international numbers with GOV.UK Notify.</p>
{% if not current_user.is_authenticated %}
<p><a href="{{ url_for('main.register') }}">Create an account</a> and try Notify for yourself.</p>
{% endif %}
<h2 class="heading heading-medium">Features</h2>
<p>Notify makes it easy to:</p>
<ul class="list list-bullet">
<li>create reusable text message templates</li>
<li>personalise the content of your texts</li>
<li>send and schedule bulk messages</li></ul>
<p>You can also <a href="{{ url_for('.documentation') }}">integrate with our API</a> to send text messages automatically.<p>
<h3 class="heading heading-small">Receive text messages</h3>
<p>Let people send messages to your service or reply to your texts.</p>
<p>You can see and reply to the messages you receive, or set up your own automated processes to manage replies.</p>
<p><a href="{{ url_for('.feedback', ticket_type='ask-question-give-feedback') }}">Contact the team</a> to request a unique number for text message replies.</p>
<h3 class="heading heading-small">Show people who your texts are from</h3>
<p>When you send a text message with Notify, the sender name tells people who it's from.</p>
<p>You can change the text message sender name from the default of 'GOVUK' in your service settings.</p>
<h2 class="heading heading-medium">Pricing<h2>
<p>Each service you set up has a free annual allowance. After that it costs 1.58 pence (plus VAT) to send a text to a UK number.</p>
<p>The free allowance is:</p>
<ul class="list list-bullet">
<li>250,000 free text messages for central government services</li>
<li>25,000 free text messages for other public sector services</li></ul>
<p><a href="{{ url_for('.pricing') }}">See pricing</a> for more details.</p>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,106 @@
{% extends "withoutnav_template.html" %}
{% from "components/sub-navigation.html" import sub_navigation %}
{% from "components/table.html" import mapping_table, row, text_field %}
{% block per_page_title %}
Message status
{% endblock %}
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-one-third">
{{ sub_navigation(navigation_links) }}
</div>
<div class="column-two-thirds">
<h1 class="heading-large">Message status</h1>
<p>When you send a message using GOV.UK Notify, it moves through different states.</p>
<p>Notifys real-time dashboard lets you check the status of any message, to see when it was delivered. You can also use our API to check the status of your messages.</p>
<p>For <a href="{{ url_for("main.security") }}">security</a>, this information is only available for 7 days after a message has been sent. You can download a report, including a list of sent messages, for your own records.</p>
<img
src="{{ asset_url('images/message-sending-flow.svg') }}"
alt="A picture of the sending flow of messages in Notify, showing the three states of Sending, Delivered and Failed. Also shows the next
steps when messages fail, deleting data and trying a new channel for permanent failures, and trying again or trying a new channel for
temporary failures"
style="width: 100%;"
>
<h2 id="messagestatus" class="heading-medium">Types of message status</h2>
<p>These are the types of message status youll see when youre signed in to Notify.</p>
<p>If youre using our API, some of the statuses youll see will be different. Read our <a href="{{ url_for('.documentation') }}">documentation</a> for a detailed list of API message statuses.</p>
<h3 class="heading-small">Emails</h3>
<div class="bottom-gutter-3-2">
{% call mapping_table(
caption='Message statuses emails',
field_headings=['Status', 'Description'],
field_headings_visible=True,
caption_visible=False
) %}
{% for message_length, charge in [
('Sending', 'Notify has sent the message to the provider. The provider will try to deliver the message to the recipient. Notify is waiting for delivery information.'),
('Delivered', 'The message was successfully delivered. Notify will not tell you if a user has opened or read a message.'),
('Email address does not exist', 'The provider could not deliver the message because the email address was wrong. You should remove these email addresses from your database.'),
('Inbox not accepting messages right now', 'The provider could not deliver the message after trying for 72 hours. This can happen when the recipients inbox is full. You can try to send the message again.'),
('Technical failure', 'Your message was not sent because there was a problem between Notify and the provider. Youll have to try sending your messages again.'),
] %}
{% call row() %}
{{ text_field(message_length) }}
{{ text_field(charge) }}
{% endcall %}
{% endfor %}
{% endcall %}
</div>
<h3 class="heading-small">Text messages</h3>
<div class="bottom-gutter-3-2">
{% call mapping_table(
caption='Message statuses text messages',
field_headings=['Status', 'Description'],
field_headings_visible=True,
caption_visible=False
) %}
{% for message_length, charge in [
('Sending', 'Notify has sent the message to the provider. The provider will try to deliver the message to the recipient. Notify is waiting for delivery information.'),
('Sent internationally', 'The message was sent to an international number. The mobile networks in some countries do not provide any more delivery information.'),
('Delivered', 'The message was successfully delivered. Notify will not tell you if a user has opened or read a message.'),
('Phone number does not exist', 'The provider could not deliver the message because the phone number was wrong. You should remove these phone numbers from your database. Youll still be charged for text messages to numbers that do not exist.'),
('Phone not accepting messages right now', 'The provider could not deliver the message after trying for 72 hours. This can happen when the recipients phone is off. You can try to send the message again. Youll still be charged for text messages to phones that are not accepting messages.'),
('Technical failure', 'Your message was not sent because there was a problem between Notify and the provider. Youll have to try sending your messages again. You will not be charged for text messages that are affected by a technical failure.'),
] %}
{% call row() %}
{{ text_field(message_length) }}
{{ text_field(charge) }}
{% endcall %}
{% endfor %}
{% endcall %}
</div>
<h3 class="heading-small">Letters</h3>
<div class="bottom-gutter-3-2">
{% call mapping_table(
caption='Message statuses letters',
field_headings=['Status', 'Description'],
field_headings_visible=True,
caption_visible=False
) %}
{% for message_length, charge in [
('Sent', 'Notify has sent the letter to the provider to be printed.'),
('Cancelled', 'Sending cancelled. Your letter will not be printed or dispatched.'),
('Technical failure', 'Notify had an unexpected error while sending the letter to our printing provider.'),
] %}
{% call row() %}
{{ text_field(message_length) }}
{{ text_field(charge) }}
{% endcall %}
{% endfor %}
{% endcall %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -14,27 +14,30 @@
<div class="column-two-thirds">
<h1 class="heading-large">Pricing</h1>
<p> To use GOV.UK Notify, theres:</p>
<p>To use GOV.UK Notify, theres:</p>
<ul class="list list-bullet">
<li>no procurement cost</li>
<li>no monthly charge</li>
<li>no setup fee to use</li>
<li>no setup fee</li>
<li>no procurement cost</li>
</ul>
{% if not current_user.is_authenticated %}
<p><a href="{{ url_for('main.register') }}">Create an account</a> then set up as many different services as you need to. Each service has its own free text message allowance.</p>
{% endif %}
<p>When you set up a new service it will start in <a href="{{ url_for('main.trial_mode_new') }}">trial mode</a>.</p>
<h2 class="heading-medium">Emails</h2>
<p>Its free to send emails through GOV.UK Notify.</p>
<p>Its free to send emails through Notify.</p>
<h2 class="heading-medium">Text messages</h2>
<p>You have a free allowance of text messages each financial year. Youll get:</p>
<p>Each service you set up in Notify has a free annual allowance. The allowance is:</p>
<ul class="list list-bullet">
<li>250,000 free text messages for central government services</li>
<li>25,000 free text messages for other public sector services</li>
</ul>
<p>It costs 1.58 pence (plus VAT) for each text message you send after your free allowance.</p>
<h3 class="heading-small">Multiple services</h3>
<p>If your organisation offers multiple services, you can have a different Notify account for each of them.</p>
<p>Each service will get its own free message allowance.</p>
<p>See <a href="#paying">how to pay</a>.
<h3 class="heading-small">Long text messages</h3>
<p>If a text message is beyond a certain length, itll be charged as more than one message:</p>
@@ -89,11 +92,11 @@
</details>
<h2 class="heading-medium" id="letters">Letters</h2>
<p>The cost of sending a letter depends on how many sheets of paper you need and the class of postage.</p>
<p>The cost of sending a letter depends on the postage you choose and how many sheets of paper you need.</p>
<div class="bottom-gutter-3-2">
{% call mapping_table(
caption='Letter pricing',
field_headings=['', 'Second class', 'First class'],
field_headings=['Paper', 'Second class', 'First class'],
field_headings_visible=True,
caption_visible=False
) %}
@@ -112,24 +115,24 @@
{% endfor %}
{% endcall %}
</div>
<p>Letter prices include:</p>
<p>Prices include:</p>
<ul class="list list-bullet">
<li>paper</li>
<li>double-sided colour printing</li>
<li>envelopes</li>
<li>postage</li>
<li>paper</li>
<li>double-sided colour printing</li>
<li>C5 size envelopes with an address window</li>
<li>first or second class postage</li>
</ul>
<h2 class="heading-medium" id="paying">How to pay</h2>
<p>You can find details of how to pay for Notify in our data sharing and financial agreement.</p>
<p>
{{ current_user.default_organisation.as_pricing_paragraph(
pricing_link=url_for('main.sign_in', next=url_for('main.pricing', _anchor='paying')),
download_link=url_for('main.agreement'),
support_link=url_for('.feedback', ticket_type='ask-question-give-feedback', body='agreement'),
signed_in=current_user.is_authenticated,
) }}
</p>
<p>Before you can use Notify to send letters or pay for text messages youll need to:</p>
<ul class="list list-bullet">
<li>send us a request to make your service live</li>
<li>sign our data sharing and financial agreement</li>
<li>raise a Purchase Order (PO)</li>
</ul>
<p>You may need to set up the Cabinet Office as a supplier before you can raise a PO.</p>
<p>After youve done that, Notify will send you an invoice at the end of each quarter. If the value of an invoice is very small, we roll it into the next quarter to save time and effort.</p>
</div>
</div>

View File

@@ -13,30 +13,29 @@
<div class="column-two-thirds">
<h1 class="heading-large">Support</h1>
<p>We provide 24-hour online support for teams with a live service on GOV.UK Notify.</p>
{% call form_wrapper(class="bottom-gutter-2") %}
{{ radios(form.support_type) }}
{{ page_footer('Continue') }}
{% endcall %}
<p>If somethings wrong, you can <a href="https://status.notifications.service.gov.uk/"> check the GOV.UK Notify system status page</a> to see if were already aware of it.</p>
<h2 class="heading-medium">24-hour support</h2>
<p>You can get 24-hour online support for Notify if you have a live account.</p>
<h3 class="heading-small">During office hours</h3>
<p>Our office hours are 9.30am to 5.30pm, Monday to Friday.</p>
<p>Contact us using one of the options on this page and youll get a reply within 30 minutes.</p>
<p>You can also <a href="https://ukgovernmentdigital.slack.com/messages/govuk-notify">get in touch with us on Slack.</a></p>
<h3 class="heading-small">Out-of-hours</h3>
<p>Outside office hours, response times depend on whether youre reporting an emergency or not.</p>
<p>You can also <a href="https://ukgovernmentdigital.slack.com/messages/govuk-notify">get in touch with us on Slack</a>.</p>
<h2 class="heading-medium">Office hours</h2>
<p>Our office hours are 9:30am to 5:30pm, Monday to Friday.</p>
<p>When you report a problem in office hours, well aim to read it within 30 minutes and reply within one working day.</p>
<h2 class="heading-medium">Out-of-hours</h2>
<p>Outside office hours, response times depend on whether youre reporting an emergency.</p>
<p>If its an emergency, well reply within 30 minutes and update you every hour until the problems fixed.</p>
<p>If your problem is not an emergency, well reply within one working day.</p>
<p>A problem is only classed as an emergency if:</p>
<ul class="list list-bullet">
<li>nobody on your team can sign in</li>
<li>a technical difficulties error appears when you try to upload a file</li>
<li>a 500 response code appears when you try to send messages using the API</li>
</ul>
<p>Well reply during the next working day for any other problems.</p>
</div>
</div>

View File

@@ -0,0 +1,45 @@
{% extends "withoutnav_template.html" %}
{% from "components/sub-navigation.html" import sub_navigation %}
{% block per_page_title %}
Using Notify
{% endblock %}
{% block maincolumn_content %}
<div class="grid-row">
<div class="column-one-third">
{{ sub_navigation(navigation_links) }}
</div>
<div class="column-two-thirds">
<h1 class="heading-large">Trial mode</h1>
<p>When you set up a new service it will start in trial mode. This lets you try out GOV.UK Notify, with a few restrictions.</p>
<p>A service in trial mode can only:</p>
<ul class="list list-bullet">
<li>send 50 text messages and emails per day</li>
<li>send messages to you and other people in your team</li>
<li>create letter templates, but not send them</li>
</ul>
<p>
To remove these restrictions, you can
{% if current_service and current_service.trial_mode %}
<a href="{{ url_for('.request_to_go_live', service_id=current_service.id) }}">send us a request to go live</a>.
{% else %}
send us a request to go live.
{% endif %}
</p>
<p>Before you can request to go live, you must:</p>
<ul class="list list-bullet">
<li>sign our data sharing and financial agreement</li>
<li>accept our terms of use</li>
<li>set up your service so youre ready to send and receive messages</li>
</ul>
</div>
{% endblock %}

View File

@@ -15,27 +15,48 @@
<h1 class="heading-large">Using Notify</h1>
<h2 id="trial-mode" class="heading-medium">Trial mode</h2>
<p>When you create a GOV.UK Notify account, youll start in trial mode. This lets you try out the service, but has some restrictions in place.</p>
<p>The information on this page has moved.</p>
<p>Find out more about:</p>
<ul class="list list-bullet">
<li><a href="{{ url_for('main.trial_mode_new') }}">trial mode</a></li>
<li><a href="{{ url_for('main.message_status') }}">message status types</a></li>
<li><a href="{{ url_for('main.features_email') }}">email replies</a></li>
<li><a href="{{ url_for('main.features_sms') }}">text message replies</a></li>
<li><a href="{{ url_for('main.features_letters') }}">letters</a></li>
</ul>
<!-- <h2 id="trial-mode" class="heading-medium">Trial mode</h2>
<p>When you set up a new service it will start in trial mode. This lets you try out GOV.UK Notify, with a few restrictions.</p>
<p>A service in trial mode can only:</p>
<ul class="list list-bullet">
<li>send 50 text messages and emails per day</li>
<li>send messages to you and other people in your team</li>
<li>draft letters, but not send them</li>
</ul>
<p>
You can remove these restrictions by
To remove these restrictions, you can
{% if current_service and current_service.trial_mode %}
<a href="{{ url_for('.request_to_go_live', service_id=current_service.id) }}">requesting to go live</a>.
<a href="{{ url_for('.request_to_go_live', service_id=current_service.id) }}">send us a request to go live</a>.
{% else %}
going live.
send us a request to go live.
{% endif %}
</p>
<h3 class="heading-small">Restrictions in trial mode</h3>
<p>In trial mode, you can:</p>
<ul class="list list-bullet">
<li>send up to 50 text messages and emails per day</li>
<li>send messages to yourself and other people in your team</li>
<li>draft letters (but not send them)</li>
<p>Before you can request to go live, you must:</p>
<ul class="list bullet-list">
<li>sign our data sharing and financial agreement</li>
<li>accept our terms of use</li>
<li>set up your service so you're ready to send and receive messages</li>
</ul>
<h2 id="messagedeliveryandfailure" class="heading-medium">Sending messages</h2>
<p>When you send a message, it moves through different states in Notify.</p>
<p>When you send a message using GOV.UK Notify, it moves through different states.</p>
<p>Notifys real-time dashboard lets you check the status of any message, to see when it was delivered. You can use our API to check the status of your messages too.</p>
<p><a href="https://www.notifications.service.gov.uk/documentation">Read our documentation</a> for a detailed list of API message statuses.</p>
<img
src="{{ asset_url('images/message-sending-flow.svg') }}"
alt="A picture of the sending flow of messages in Notify, showing the three states of Sending, Delivered, And Failed. Also shows the next
@@ -43,7 +64,7 @@
temporary failures"
style="width: 100%;"
>
<h2 class="heading-medium">Message statuses emails and text messages</h2>
<h2 id="messagestatus" class="heading-medium">Message status emails and text messages</h2>
<h3 class="heading-small">Sending</h3>
<p>GOV.UK Notify has sent the message to the provider. The provider will try to deliver the message to the recipient. GOV.UK Notify is waiting for delivery information.</p>
<h3 class="heading-small">Sent internationally (text messages only)</h3>
@@ -65,16 +86,14 @@
<p>Youll have to try sending your messages again.</p>
<p>You will not be charged for text messages that are affected by a technical failure.</p>
<h2 class="heading-medium">Message statuses letters</h2>
<h2 class="heading-medium">Message status letters</h2>
<h3 class="heading-small">Sent</h3>
<p>GOV.UK Notify has sent the letter to the provider to be printed.</p>
<h3 class="heading-small">Cancelled</h3>
<p>Sending cancelled. Your letter will not be printed or dispatched.</p>
<h3 class="heading-small">Technical failure</h3>
<p>GOV.UK Notify had an unexpected error while sending to our printing provider.</p>
<p><a href="https://www.notifications.service.gov.uk/documentation">Read our documentation</a> for a detailed list of API statuses.</p>
<h2 class="heading-medium">Receiving messages</h2>
<h3 class="heading-small">Email replies</h3>
<p>You can choose an email address you want replies to go to.</p>
@@ -84,17 +103,9 @@
<p>Youll be able to see and reply to text messages you receive. You can also create automated processes to manage replies.</p>
<p>Youll still need to have a manual process in place for any messages that cant be dealt with automatically.</p>
<h2 class="heading-medium">Multiple services in one organisation</h2>
<p>If your organisation offers multiple services, you can have a different Notify account for each of them.</p>
<p>Each service:</p>
<ul class="list list-bullet">
<li>gets its own free message allowance</li>
<li>has to request to go live separately</li>
</ul>
<h2 class="heading-medium">Letters</h2>
<p>Letters can be up to 10 pages long (5 sides of paper, double-sided).</p>
<p>Notify sends letters in C5 size envelopes, with a window.</p>
<p>Notify sends letters in C5 size envelopes, with a window.</p>-->
</div>
</div>