Building G Suite add-ons with Google Apps Script (Google Cloud Next ’17)

[MUSIC PLAYING] MARK FASHING: Hello, everyone. Welcome to Next. I’m Mark Fashing, software
engineer with the Google Apps Script team, here with my
co-presenter, Daniel Florey, CEO of floreysoft. And we are here today to
talk to you about something we’re both really excited
about, building G Suite add-ons with Google Apps Scripts. So let me give you an idea of
where we’re going to go today. First, I’m going to give you
a little bit of background on Apps Scripts and
add-ons for those who may not be familiar with them. Then we’ll talk
about how to code your own add-on from scratch
and how you would publish it. And then I’m going to hand off
the presentation to Daniel, who’s going to show you
the product that he’s built on our platform,
which I think is a really powerful
demonstration of the potential of this platform. And he’ll do a
live demo as well, showing how he’s used add-ons
to more tightly integrate with G Suite products. And then after
that, I’ll introduce a few of the new features
that we’ve got planned. And we’ll talk
about what you can do to get involved in
publishing add-ons. And then there will be a little
bit of time for Q&A at the end. So first, let me give you
a little bit of background. What is Apps Script? Apps Script is a serverless
JavaScript runtime for G Suite automation,
extension, and integration. That’s a bit of a mouthful. But there’s a couple
of keywords in here. Serverless. Of course, Apps Script
runs on servers. But the idea is that you
don’t have to provision them. So you might call this
zero provisioning. And that’s pretty
cool, because it means you can write
your code and let us worry about the rest of it. And the other key word
in here is G Suite. Apps Script is purpose
built for integrating with G Suite products. Which means we have a lot of
built in APIs that you can take advantage of that make it
easy to interact with Gmail and Calendar and Drive and Docs,
and whatever G Suite products you want to interact with with
your script, with your add-on, with your web app. So what are add-ons? Add-ons extend G Suite
products so you can get the things you need to do done. And the keyword here is extend. Add-ons run inside G Suite
products, creating menu items, dialogs, sidebars, so that
you can build functionality into that product in
a seamless manner. For example, let’s
say that you would want Docs to be able
to translate text into other languages. You can build an
add-on for that. One of the unique
things about add-ons is that they are a
true cloud technology. And people throw around
the word cloud a lot. You’ve probably heard it
thrown around a lot here. In the case of add-ons,
it’s really true. Because add-ons are running
in cloud native docs editors, and they’re running on a
cloud development platform, it means that for one thing,
they’re always up to date. So for example, you’ve
got a new feature that you want to push out
to users in your add-on. Code it, redeploy,
and the next time that users use that add-on, the
feature will be there for them. They don’t have to download. They don’t have to re-install. And this is pretty cool. Likewise, domain-wide install
is made easy for enterprise. If you publish your add-on
to the G Suite marketplace, domain admins can
install to their domain. And then the next time that
users in their enterprise use that product, say, Sheets,
that add-on will already be there for them. You don’t have to
build an installer. You don’t have to push it
out to the workstations. It’s easy to deploy. And there are a whole
host of other advantages. I’ve listed some of them here. But I don’t have time to talk
through all of them today. So let’s dive right into coding. I’m going to show you how to
build a simple Sheets add-on. But first, let me set
the stage for you. So let’s say that you’re
a Sheets power user. You really like using Sheets. But it doesn’t have all the
functions that you need. That’s OK. Apps Script lets you
define your own functions. We call them custom functions. Some people call them
user defined functions. Some people call them macros. But you can go to the Script
editor and write your own. But then it’s a bit of a
hassle to copy these around from Sheet to Sheet. You keep having to look back
at your script to remember which ones you wrote. And now your
teammates are asking to use these functions too. How do we solve this problem? Let’s write an add-on. And to make things a
little more interesting, let’s add some built-in help. So you might be familiar with
custom functions already. But basically the idea
is when you’re in Sheets and you need another function,
you can go into the Tools menu and click Script Editor. That will take you into the
Apps Script script editor, and create a script
for you that’s embedded in that sheet where
you can write functions in ordinary JavaScript,
just like the ones I’ve created here. These are actual
finance functions from another popular
spreadsheet software. We don’t have them in Sheets. But with this add-on, now we do. And you can invoke
them in a cell just like you would
a built-in function with the familiar
equals notation. So let’s get to that help
page I was talking about. So we created these
custom functions. And I’d like to add some
documentation in a sidebar. When you’re building
add-ons, there’s a special method
that Apps Script recognizes called onOpen. We call these methods
simple triggers. But the idea is basically
that if a user has installed an add-on, and
they open a Sheet, this onOpen method will get
run when they open a Sheet. And this method, as you
can see, adds a menu item, show documentation, that invokes
this callbacks showSidebar, this other method we’ve defined. So that’s pretty simple. And then showSidebar itself
is not very complicated. It just creates a help
page and then opens it in a sidebar in the Sheets UI. So what does that
help page look like? It’s just a web page. So building sidebars is
easy if you’re already familiar with basic web
technologies like HTML, CSS, and JavaScript. And you can call
server side functions in Apps Script from
your sidebar client code by using the API So in not very much
code, we’ve done something useful in Sheets. We’ve added some
custom functions that we didn’t have before. We’ve added a menu item
to open our help page, and we’ve added a sidebar. And this is what it actually
looks like inside Sheets when we use this add-on. You can see I’m invoking
the custom function. And there’s the documentation
in the sidebar on the right that I open by clicking the
menu item, which would show up in the add-ons menu. When you’re ready to test
it in the script editor you can go into the Publish
menu and click Test as add-on. This allows you to simulate
different install states on different documents. So you pick sheets that you
want to try your add-on out on and select what kind of
installation configuration you want. But remember, it’s
OK to make mistakes. Because like I said at
the beginning of the talk, add-ons are always up to date. Which means that if you
have a bug in the add-on that you pushed, it’s
very low cost to fix it. Code the fix, republish, and
the next time your users use it, they’ll get the bug fix. So feel free to launch and
iterate on a very tight cycle. So now that you’ve seen how
to code the add-on, let’s talk about deploying
it and what it looks like when a user uses it. So to deploy the add-on, you
can go into the Publish menu in the Script Editor. And this time we’re
going to click Deploy as Sheets web add-on. And what happens
then is that we’ll create an entry in the Chrome
Web Store for your add-on. And it will give you a
link, you’ll follow it, and you’ll go provide a few
bits of extra information. Add icons, some promo images,
a description of the add-on. And then you’ll decide who
you want to publish it to. You can publish it to the world. You can publish it
to your business by publishing to a domain. You can publish it to a
group of trusted testers. It’s up to you who you want
to share your add-on with. And then if you want to
allow enterprise users to do domain-wide
installs, you can publish to G Suite marketplace. So we made an
add-on, and now users can find it by
going into Sheets. And if you go into
the Add-ons menu and click Get Add-ons, something
that you can do right now, you can browse the
Chrome Web Store and search the Chrome
Web Store for add-ons that people have published. In the case of the add-on
that I just demoed, I published it to a domain, so
you won’t have access to it. But there are hundreds
of other add-ons that have been
published, including add-ons that my co-presenter
Daniel has published. When you install an add-on,
you’ll almost certainly see this prompt. And I think it’s important to
know what this prompt means. Apps Script will automatically
determine which permissions the script requires to run. And so if you’re add-on
accesses a user’s Gmail, or accesses their email address,
or accesses their Sheets, different permissions will
be displayed in this prompt. And this prompt
will ask the user for exactly the permissions
that your add-on needs. This is all managed for you. If you’ve heard
of OAuth 2.0, it’s an industry standard
security model. That’s what Apps
Script is using. But you don’t have
to worry about it, because it’s built-in. And that means that users
can trust your add-on to only access the data that
you’ve requested permission that they’ve
explicitly authorized. So I’d like to walk briefly
through what it looks like when a user installs an add-on. So let’s say user Alice goes
to their Chrome Web Store. And she gets an
add-on from the store. Well, now let’s say she
installs a Sheets add-on. When she opens a
sheet, now the add-on will run in a very
limited mode that basically exists to be able to
add menu items inside Sheets. When she uses the
add-on, the add-on will run with all the
privileges that she authorized when she installed the add-on. But another interesting thing
will happen to that document. Now triggers like onOpen
and onEdit and onInstall will run with
additional privileges. But more importantly,
when user Bob, who’s never installed this
add-on opens the sheet, the onOpen trigger
will also run. And this is an important
feature for collaborators. Because if Alice has used
this add-on in the document, chances are Bob wants to too. And when Bob goes to use
the add-on by selecting one of these menu
items, that’s when Bob will be prompted to install
the add-on from the Chrome Web Store. And at that time, Bob will
authorize the access required for that add-on to run as Bob. This is an important
way for users to discover your add-ons
when collaborators on their documents
have used them. So now you’ve seen how to build
a relatively simple add-on. I want to give you an impression
of what the true potential of this platform is. And I can’t think
of a better person to do this than my
co-presenter, Daniel Florey, CEO of floreysoft, who’s built his
product Ultradox on the Apps Developer Platform,
and uses add-ons to more tightly integrate
with G Suite products. DANIEL FLOREY: OK. Thank you, Mark. And thanks for the
opportunity to show Ultradox and the Ultradox
add-ons here at Next. So for all of you who have
never heard of Ultradox before, let me give you a very
brief idea of what it is and why we made it. So we’ve created
Ultradox to enable people with or without coding skills
to automate their business and create enterprise apps. So can we go to the slides? So Ultradox comes with a set
of high level building blocks. And you can create
automations or apps by assembling these building
blocks using our drag and drop interface. And as most enterprise related
business processes also involve documents and
emails, Ultradox also comes with a very
powerful template engine that you can use to generate
PDF, [INAUDIBLE], Office documents right in
the cloud, and also to create responsive emails. So once you’re happy
with your flow, you can then publish your
app with a single click and use it right away on your
browser, on your mobile device, or your desktop. So I think this combination
of features really works. So we have a large
number of customers from universities,
schools, and for example, law firms, who are able to
automate their business. Which is not very surprising,
because the brain of a lawyer seems to be quite similar
to the brain of a developer. So they all also like
to think in rules. But we also have a
number of customers that you would not
expect in the first place to create apps by themselves. So for example, like this review
from the G Suite marketplace. “As I am a tree surgeon,
my computer skills are not amazing. I’m much better with a chainsaw. Ultradox has enabled me
to create my own quoting machine,” and so on. So I think this gives
a good impression of the variety of customers. OK. So Ultradox comes with a
number of bundled add-ons. You can see that in
the Works With section when going to the G
Suite marketplace. And that’s pretty nice. Because once you install
Ultradox from the G Suite marketplace, you get
all the bundled add-ons installed right away. And this installation
flow works fine no matter if you’re using
your personal Gmail account or if you are adding it to your
G Suite domain as an admin. So Ultradox comes with add-ons
for Docs, Sheets, and Forms. And I will show you our Docs
and Forms add-ons in a minute. When installing
Ultradox, you also get a dedicated file
type on Google Drive. So you can create, edit,
and share Ultradox files on Google Drive just like
the native file types. And I think this tight
integration and seamless integration is what really sets
the G Suite ecosystem apart from the competition. Because you can really create
third party applications that work almost in the same
way as the standard G Suite applications. So now it’s time to pray
to the demo-god, because I want to try to create an
application from scratch, live on stage. And I would like you
to go to this URL because that should take
you to a Google form. And I will try to create
an automation that will get triggered by your Google form. And then we’ll create a
personalized PDF document and send it as an
attachment to you by email. So just open the Google form. Don’t submit it right
now because it will not do anything useful yet. But we will use that
in 10 or 15 minutes. OK. So hopefully, some of you
have the form open already. OK. Otherwise, I ask the guys
next to you for the URL. OK. So can we switch to
the demo machine? So when logging
into Ultradox, you will find a number of
pre-built solutions, similar to what you see when
logging into Google Docs. But each of these solutions
comes with a number of files. So when using these examples
as a starting point, you will then get a folder on
your Google Drive containing all the involved files. So we have readymade solutions
from simple newsletter sign up systems, generating
invoices from a timesheet. Up to more complete applications
like our famous PDF invoicing for Stripe that you can
add to your Stripe account to automatically send out nice
PDF invoices to your customers, or complete approval flows like
the purchase order example. But for this demo, I will just
start with a blank document. So you can also create
a blank document from the Google Drive New menu. So when opening a new
document, a wizard will pop up to guide you through
the most common use cases. But in this example,
as I hopefully should know what I’m doing,
I will just get rid of that and start from scratch. First of all, I’ll
give our file a name. So that when switching
to Google Drive, you will then find
the corresponding file with an Ultradox
file icon over here. OK. So let’s, first of all,
have a look at the editor. On the left hand
side, you will find a number of building
blocks that you can use to create
your application, from very simple stuff like
uploading, downloading files from Google Drive, to
more complex building blocks, for example, a complete
check out flow that you can add to your application by
simply dragging that building block to your flow. But as I said, I wanted to
start with a Google form. I will use this building block. And when creating a
building block that is referencing an
external file, you can either create a
new file from scratch or select an existing
one from Google Drive. So I will pick the one
that I’ve prepared. I think that’s the
one that you hopefully have open on your
mobile device or laptop. So each building block
comes with some input on the left hand side and
output on the right hand side. So I will add some
dummy data so that I can test my flow without
submitting the form each time. So next, I want to
generate a PDF document from a Google document. So I will drag this Google
Docs to PDF document building block to the flow. And I will select
a Google document that I’ve prepared
for this demo. So when going to
Google Docs, this will open just a
plain Google document. And in Google Docs, you will
now find the Ultradox add-ons. And I will get started with
the Ultradox template editor. So this one has been
designed to help you when working on documents
that end up as a PDF or Word document. So in the sidebar, you
will now find all variables from the building blocks that
you have added to your flow. In our example, we just have the
variables from the Google Form. So if I want to
personalize this document, I can just go here and
click on the name variable. And this will bring up a
bunch of formatting options, like printing the string
in uppercase letters only or stuff like that. But I will just
insert it as it is. And I can also add the
time stamp as a date. And as Ultradox has detected
that the response time stamp is of type date, you will now get a
lot of date formatting options. So this is probably not very
important in the United States. But if you are
sending out invoices in Europe or across
the world, then it’s really the tricky part to get
all the date, currency, number formatting right. So Ultradox also
helps you with that. But aside from these
simple merge tags, you can also use more complex
stuff in your templates like loops or conditions. So I have created a table
where certain table rows will be then visible
depending on the role that you are picking
in your form. So when clicking on
the preview icon, we should now get a PDF
preview using the dummy data that I’ve entered into
my form and with the text block for the picked role. OK. So next, I want
to create an email that I want to send out
with this document attached. So as I want to use
a nice HTML email, I will use the Google Docs
to HTML building block. And this time I will start
with a blank document. So let’s give that a name. And we can all check out
the Email Designer add-on. So our Email
Designer add-on comes with a bunch of
predefined layouts that play nicely on
desktop and mobile devices. So that’s always the tricky part
when sending out HTML emails. So I’ll get started with
a very simple theme. And the basic concept is
that you assemble your emails from predefined modules. So you will find a number
of matching modules in the sidebar. And some modules
have already been assembled as a starting point. So this is just an
ordinary Google document. So I can go ahead and work on it
just like you know it already. I can get rid of some
columns that I don’t need. And for this demo,
now I want to show you a more advanced
feature of Ultradox. You cannot only insert very
simple data like the name and timestamp that we’ve seen,
but Ultradox is also able to deal with complex data. So as an example, let’s load
some data from a Google sheet. So I’ve prepared a sheet
with some of the recommended sessions of the next days. And now you will see all
the available columns in the sheet as area
variables on the right hand side of the building block. So this is the simple
sheet that I’ve prepared. And these are the corresponding
variables that you will now get in Ultradox. So in the Email
Designer, you will also find the Variables tab where
you can insert variables that you have been loading
before in your flow. So now I can go ahead and insert
some variables that I’ve just loaded from the Google sheet. For example, title and
description of the session. And I can also do
more fancy stuff like rendering this image
to your edit as an image. So I can now specify some
image-specific formatting options. And the nice thing
is Ultradox knows that these variables are areas. So they contain multiple values. So when generating a
preview of this email, Ultradox should now
automatically expand the variables from the
sheet and create an entry for each row in the sheet. OK. Took a while. So you will see an entry
for each row in the sheet. So the row in the email has
been repeated automatically. So that’s pretty nice when
dealing with more complex data structures. So for example, when
creating invoices, this is always the
tricky part to have to display complex data. On the right hand
side, you will find a preview for mobile devices. And on the left
hand side, you’ll see how this will
look like on desktops. OK. Let me just switch to a
nicer version of this email that I’ve prepared. And finally, I want to
send out this email– this HTML document as an email. So we can pick the
sender address. And Ultradox provides
various email providers, so you can send out
using your Gmail account, or you can also use
Amazon’s own SES. That allows you to track your
email deliveries and bounces. So I want to attach the
PDF document that we’ve generated previously. And I will also try to track
these emails so I could either trigger certain actions whenever
the email gets delivered or opened. But I just want to use Google
Analytics to track the email deliveries. So I will have to
copy and paste. And finally, as this
is a cloud conference, and I want to push the
cloud to its limits, I will also add a Google
Cloud Print building block. So this will print
the PDF document that we are generating right
from the cloud on the printer in my office back in Germany. So this is a very nice feature
because if you, for example, are generating invoices,
you have an online shop and you are triggering
the invoice generation, then you could, for
example, automatically print out the invoices in
the office of your accountant and stuff like that. So I think that’s pretty
nice with Google Cloud Print. OK. Almost forgot to switch on the
trigger in the Google form. So in Google Forms, you will
find the Ultradox trigger add-on. And this one will
allow you to trigger the flow that we’ve created
whenever a form gets submitted. So we should activate
it over here. And you will also be able
to rename the variable. So by default they are
based on the question type, so that’s fine with me. OK. Somebody already submitted
the form, I guess. Let’s check. OK. You can also give it a try. And the nice thing
is that you can see in real time in Ultradox if
anybody is submitting the form. So I should receive an
email with the attachment. And we can also go to
Google Analytics and check– somebody did not enter
the correct email. But at least– this is the
email that I’ve just received. And attached I will find the
personalized PDF document. So let’s finally check
if the printing works. So I asked my sister to look– OK. Because it’s midnight
now in Germany. So something is going on there. OK. So that’s all from my end. So back to you. MARK FASHING: Daniel,
I think that’s a pretty cool presentation of what
you can build with add-ons. Daniel showed you both a
Docs and a Forms add-on. So now you’ve seen the whole
space covered– and Sheets. Well, you think you’ve seen
the whole space covered. Can we– oh, we
are back on slides. Awesome. So I’m going to
tell you about some of the new exciting features
that we’ve got in the works. So first off, mobile add-ons
have been out for a while. These aren’t really new
anymore, but we have support for Docs and Sheets. And the cool thing
about mobile add-ons is that they are
native Android apps. Which means if you already
have an Android app, you can make it into
a mobile add-on. And you can also invoke server
side functions in Apps Script by using the execution API. This code is an example
of how you would do that. But it’s relatively simple. You just create a request and
build this operation type. And then you can send it to
Apps Script using this API. And it will execute
asynchronously. And you can get the
results when you’re ready. So a good example
of a mobile add-on is EasyBib built
to mobile add-on. They already had a mobile app. And what their add-on does
is it integrates with Docs. So you can go into the
add-ons menu in Docs, you can select the EasyBib app. And that will take you
into their app, where you can search for the
citation that you’re looking for for your paper. And you can add it
to your bibliography and say to cite it in the Doc. That will cause that entry to
get inserted into your Doc. And you’ll be back in the
Doc like you never left. And so this creates a
much tighter integration, where you don’t have to
jump between mobile apps. It’s all handled by
the add-on developer. So new features– you might
have heard an announcement this morning from ProvOKer. Gmail add-ons are on the way. We’re really excited
about this launch. We think that people
are going to do really cool things with Gmail. And if you want
to find out more, if you want to be one
of those people that’s doing really cool
things with Gmail, we have a session at Next that
I encourage you to attend. It’s right here in the Marriott
in Salon 6 at 5:20 today. The title of the
talk is “A new way to integrate your
app into Gmail.” Another launch that
we’ve got coming up– Slides add-ons. It’s also going to be a
really cool new feature. And you have the opportunity
to sign up for the early access program now. You can go to this
link to sign up for the early access program. I’ll give you a second
to copy it down. Or you can ask me after I
talk and I’ll give it to you. And then for more information,
also feel free to visit,
where I have been promised there will be more
info on slides add-ons. Everybody who wanted to get an
opportunity to copy this down? All right, awesome. So what next? Where do we go from here? Well, first of all,
I invite you to go to
script/. This is a great resource our
developer relations team– some of whom are actually
in the audience– have done a really awesome
job of putting together quickstart guides, tutorials,
reference documents, and information about
our early access program. The quickstart
guides in particular are of interest if you’re
interested in add-ons. Because we have a quickstart
guide for Docs add-ons and for Forms add-ons. They only take about five
minutes to go through. They’re incredibly informative. I’ve done them myself. They’re very useful,
and you’ll learn a lot. Also, I encourage you
to watch more YouTube– just in general. But if you want to
learn about Apps Script, we’ve got some really
great tutorials online on the Apps Scripts platform. Unfortunately, we don’t
have a talk yet on add-ons. Although, Wesley, I
hope you’ll add one. But these are a
really great resource. If you’re just getting
started with Apps Script, you can learn a lot
from these videos. And then since you’re
at Next, I encourage you to take advantage
of the opportunity to attend more Next
sessions on this topic. In particular,
we’re going to have a talk on how to use Stackdriver
logging and BigQuery to do monitoring in analytics. This is going to be
really interesting. And it’s a rare opportunity
to get insight into how to leverage these technologies. And I think it could be very
useful to add-on developers, because a successful add-on can
easily have tens of thousands of users. That’s going to take
place in Moscone West, in room 2010 at 4 o’clock,
which is in the next Breakout session. But you’re going
to have to choose. Because there is also a
talk on Docs APIs and Apps Script taking place here
in the Marriott in Salon 7 also at 4:00 PM. And it’s also incredibly
useful for people interested in add-ons, because
this talk is going to help you learn how to
integrate with the Docs editors. And finally, as I
mentioned, there’s going to be a session
on Gmail add-ons here in the Marriott
at 5:20 in Salon 6. So with that, I’d
like to invite you all to publish your own add-on. Think about what
you need, build it, decide who you want
to share it with. You can publish it
to the world, or you can publish it to your business,
but build something cool. And when you have
published it, know that it will be easy
for users to install. Whether they want to install
it one user at a time, or whether businesses want to
install it to their domain. And remember that we have
this tight launch and iterate cycle that’s made possible
by being a cloud platform. And take advantage
of that so that you can publish early and often. And remember that because
you’re building on Apps Script, it’s going to be easy to
integrate with Google services, like Gmail and
Calendar and Drive. You can do lots of
cool things this way. And we’ll take care of
a lot of the details, like the OAuth 2.0
security model, and make it easy for you to make
a rich experience in the Google ecosystem. [MUSIC PLAYING]

8 thoughts on “Building G Suite add-ons with Google Apps Script (Google Cloud Next ’17)

  1. Great introduction to Google Apps Script and an interesting real use case. Ultradox looks like quite a powerful tool for anyone using G Suite or interesting on what you may built on Apps Script.

  2. The term "serverless", as noted in the video, might be called "zero provisioning." Thank you for explaining the use of the term within this context. I have found the use of the term "serverless", in this context, to be something that makes no sense, and is therefore confusing. My initial thought was, "It must run in the browser, on the 'clients' computer" I mean, if it's "serverless" then there must not be a server involved. Right? Of course Apps Script doesn't run in the browser. Using the term "serverless" to describe a service that runs on the server, is confusing at best. Promoting something as "serverless" seems to be a mute point to me. Unless you, or your organization, buy servers, and maintain them, then what you are using is already "serverless."

  3. !!!!๐™ƒ๐™š๐™ฎ ๐™‚๐™ช๐™ฎ๐™จ๐™จ!!!! (๐™จ๐™ช๐™˜๐™ ๐™– ๐™ฃ๐™ž๐™˜๐™š ๐™ซ๐™š๐™™๐™ž๐™ค) ๐˜ฝ๐™ค๐™ก7 ๐™‚๐™ž๐™ซ๐™š๐™จ ๐˜ฝ๐™š๐™จ๐™ฉ ๐™Ž๐™š๐™ง๐™ซ๐™ž๐™˜๐™š ๐™Š๐™› ๐™‚ ๐™Ž๐™ช๐™ž๐™ฉ๐™š ( ๐™‚๐™ค๐™ค๐™œ๐™ก๐™š ๐™€ ๐™ข ๐™– ๐™ž ๐™ก ๐™ƒ๐™ค๐™จ๐™ฉ๐™ž๐™ฃ๐™œ ) ๐™‰๐™ค๐™ฌ ๐™ฎ๐™ค๐™ช ๐™˜๐™–๐™ฃ ๐™ฅ๐™ž๐™ฃ๐™œ ๐™ข๐™š ๐™ค๐™ฃ ๐™จ๐™ ๐™ฎ๐™ฅ๐™š๐™ž๐™™ : ๐™ƒ๐™€๐™ˆ๐˜ผ๐™‰๐™_136 , ๐˜ผ๐™ฃ๐™™ ๐™’๐™๐™ฉ๐™จ๐™–๐™ฅ๐™ฅ : 91 7838888 080 ๐™ฌ๐™–๐™ฉ๐™˜๐™ ๐™ค๐™ช๐™ง ๐™ซ๐™š๐™™๐™ž๐™ค ๐™ก๐™ž๐™ฃ๐™ -#GSuiteGoogleEmailHosting

  4. He very conveniently jumps past the aches and pains that come from deploying as a Sheets add-on. It's not just add some screenshots and other details. It is add screenshots and security keys, and project IDs, and obscure manifest files, and project IDs…. All of which doesn't work because it's trying to make a chrome extension that doesn't make sense.

  5. Like the presenter from google a lot. He emphasizes all the key words so we understand all the important ideas without confusion !!

Leave a Reply

Your email address will not be published. Required fields are marked *